Java 如何找到节点的和';如果树不完整,给定深度的s值?
我以前也问过类似的问题,应该说得更详细一些。 上一次是PHP中的“如何在二叉树中找到给定深度的节点值之和” 所以现在我试着用Java写这个。Java抛出nullPointerException。原因是下面的代码无法处理树不完整的情况Java 如何找到节点的和';如果树不完整,给定深度的s值?,java,binary-tree,depth,Java,Binary Tree,Depth,我以前也问过类似的问题,应该说得更详细一些。 上一次是PHP中的“如何在二叉树中找到给定深度的节点值之和” 所以现在我试着用Java写这个。Java抛出nullPointerException。原因是下面的代码无法处理树不完整的情况 public int getNodeValueByDepth(Node n, int level) { if(level == 0) { return n.data; }
public int getNodeValueByDepth(Node n, int level) {
if(level == 0) {
return n.data;
}
else {
return getNodeValueByDepth(n.left, level-1) +
getNodeValueByDepth(n.right, level-1);
}
}
我的测试树结构是:
/*
* construct tree
* sum of node's value
* 5 depth 0 ==> 5
* / \
* 3 10 depth 1 ==> 13
* / \ / \
* 2 4 6 11 depth 2 ==> 23
* / \
* 7 9 depth 3 ==> 16
*
* depth 4 ==> null
*
*/
所以,当我调用getNodeValueByDepth(root,3)时,它是7+9,它会抛出和null指针异常错误。我试图添加逻辑来处理节点left和right为null的情况,但仍然无法找出如何处理,而且如果不解决这个问题,我就无法入睡
谁能给我一个提示吗?我尝试了,但没有,它只返回0
public int getNodeValueByDepth(Node n, int level) {
int sum = 0;
if(level == 0) {
return sum + n.data;
}
else if(n.left != null) {
return sum += getNodeValueByDepth(n.left, level-1);
}
else if(n.right != null) {
return sum += getNodeValueByDepth(n.right, level-1);
}
else {
return sum + 0;
}
}
您的控制语句在每种情况下都使用
else
,因此只有一条语句得到评估。因此,如果它对左侧求值,则返回时不会对右侧求值
public int getNodeValueByDepth(Node n, int level) {
int sum = 0;
/** If we have reached our desired level */
if (level == 0) {
if (n != null) {
/** Assuming data is an int and not nullable */
return n.data;
} else {
/** Change this to 0 if you don't want an error condition */
return -1;
}
/** We are not the desired level, so get the sum of .left and .right, knowing either may not exist */
if (n.left != null) {
sum += getNodeValueByDepth(n.left, level-1);
}
if (n.right != null) {
sum += getNodeValueByDepth(n.right, level-1);
}
/** Now have evaluated every possible child and stored the sum, even if it is 0 */
return sum;
}
注意:检查语法错误,我是在没有Java的机器上写的 在最后一个示例中,去掉最后一个“Else”,让它返回总和,而不管前面的条件是否成功,它都应该工作。当我调用getNodeValueByDepth(root,3)时,它返回了9,但我想我们更接近了。。现在检查更多细节..啊!对不起,我认为我的示例树结构有缺陷,7应该是9的子级。所以你的代码是正确的。
public int getNodeValueByDepth(Node n, int level) {
int sum = 0;
/** If we have reached our desired level */
if (level == 0) {
if (n != null) {
/** Assuming data is an int and not nullable */
return n.data;
} else {
/** Change this to 0 if you don't want an error condition */
return -1;
}
/** We are not the desired level, so get the sum of .left and .right, knowing either may not exist */
if (n.left != null) {
sum += getNodeValueByDepth(n.left, level-1);
}
if (n.right != null) {
sum += getNodeValueByDepth(n.right, level-1);
}
/** Now have evaluated every possible child and stored the sum, even if it is 0 */
return sum;
}