希望这将是一个简单的问题。我试图在二叉树上找到给定唯一数字的级别。我的二叉树就是
[1,2,3,null,4,null,5]
我试图检查两个节点的高度是否相同(在本例中为4和5)。我实现了以下解决方案。
public int findNodeHeight(TreeNode root, int nodeValue, int height){
//if end of tree, exit loop
if(root == null){
return -1;
}
//if we found the value, return height
if(root.val == nodeValue){
return height;
}
//check the left
int left = findNodeHeight(root.left,nodeValue,height++);
if(left!=-1){
return left;
}
//check the right
int right = findNodeHeight(root.right,nodeValue,height++);
if(right!=-1){
return right;
}
return -1;
}
但是,这不起作用,它返回5的高度2(正确)和4的高度1(错误)。但是,如果我将++运算符更改为
height+1
如下:
public int findNodeHeight(TreeNode root, int nodeValue, int height){
if(root == null){
return -1;
}
if(root.val == nodeValue){
return height;
}
//check the left
int left = findNodeHeight(root.left,nodeValue,height+1);
if(left!=-1){
return left;
}
//check the right
int right = findNodeHeight(root.right,nodeValue,height+1);
if(right!=-1){
return right;
}
return -1;
}
该解决方案现在可以工作了。为什么在方法调用中使用++运算符是错误的?
谢谢!
答案 0 :(得分:4)
原因是当您传递height
时,该方法将以height++
的值执行,然后height
的值增加1。
height++
是一个后递增运算符,它将在语句执行后 内将height
的值仅增加1。 ++height
是一个预递增运算符,它将在执行语句之前将height
的值增加1。
如果在height
上使用pre-increment运算符,在根本没有进行第二个findNodeHeight
调用的情况下,它可能会很好地工作,但是在第二个{{1进行了}}调用,因为它将在第二次调用中更新findNodeHeight
的值。因此,建议使用height
,以防它提供正确的结果,因为增量运算符可能不会总是提供正确的结果。
答案 1 :(得分:2)
在这种情况下,您不能在方法调用 中使用++,因为var++
递增var
,但它返回原始 var
,这意味着您只需传递var
。相反,如果您使用++var
,它将同时增加var
并传递新增加的值。
答案 2 :(得分:2)
这是由于
height++
返回高度和高度,并将高度增加1和
height+1
只返回height + 1,而不会增加高度,这也是一个问题。