【发布时间】:2020-05-24 16:34:36
【问题描述】:
我有一个任务:
给定二叉树 T 的根节点。我们区分 T 中的 3 种节点:具有 0 个子节点的节点、具有 1 个子节点的节点和具有 2 个子节点的节点。为每种类型确定 T 中的节点数。将结果作为长度为 3 的整数数组返回。
我得到了一个 Java 文件,它为此算法生成随机测试用例。
我只被允许创建一个函数来完成所有这些。我不允许将任何其他参数传递给下面的方法。我也不允许在我创建的函数之外进行任何其他修改。
在文件中,已经插入了一个基本案例。我被告知使用递归以后序遍历树。
我知道我的代码当前存在问题。但我不知道如何修复它们。
我目前的代码如下:
private static int[] problem1(Node root) {
int[] arr = new int[3];
if (root == null) {
return new int[] {
-1, // nodes with 0 children
-1, // nodes with 1 child
-1 // nodes with 2 children
};
}
//problem1(root.left);
//problem1(root.right);
if (root.left != null && root.right != null) {
arr[2]++;
problem1(root.left);
problem1(root.right);
} else if (root.left != null && root.right == null) {
arr[1]++;
problem1(root.left);
} else if (root.left == null && root.right != null) {
arr[1]++;
problem1(root.right);
} else {
arr[0]++;
}
return arr;
}
Node类定义为:
static class Node {
public int value;
public Node left;
public Node right;
}
【问题讨论】:
-
首先,您是否允许返回在您的方法所属的类中声明的静态变量?您的方法是否严格应该只返回一个本地数组?你还介意分享
Node类的定义吗?我们需要更多背景信息! -
@AmalK 我已将节点类定义添加到我的帖子中。只要我不修改函数之外的任何内容,但它必须是一个 int 数组。
-
当您的问题得到解答后,请不要在标题中添加“已解决”之类的内容。接受答案是表明您的问题已解决的方式。
标签: java algorithm binary-tree