Java 递增与加一时没有返回树搜索的正确结果
Java not returning correct result for tree search when incrimenting versus adding one
希望这是一个简单的问题。我试图在二叉树上找到给定唯一数字的级别。我的二叉树是
[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;
}
但是这不起作用,它 returns 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;
}
该解决方案现在有效。为什么在方法调用中使用++运算符是错误的?
谢谢!
在这种情况下,您不能在方法调用中使用 ++ 因为,var++
递增 var
,但它 returns 原始 var
,这意味着您只是传递 var
。相反,如果您使用 ++var
,它会增加 var
,并传递新增加的值。
原因是当你传递height++
时,该方法以height
值执行,然后height
的值增加1。
height++
是一个 post 递增运算符,它将 height
的值仅在执行 之后 递增 1陈述。 ++height
是预递增运算符,它将在 语句执行之前将 height
的值递增 1 。
如果您在 height
上使用预递增运算符,它可能在根本没有进行第二个 findNodeHeight
调用的情况下正常工作,但可能会在第二个 findNodeHeight
调用是因为它会在第二次调用时更新 height
的值。因此,建议使用 height+1
以防它提供正确的结果,因为增量运算符可能不会始终提供正确的结果。
这是因为
造成的
height++
returns height 和 height 加 1 和
height+1
只是 returns 高度+1,它不会增加高度,这也是一个问题。
希望这是一个简单的问题。我试图在二叉树上找到给定唯一数字的级别。我的二叉树是
[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;
}
但是这不起作用,它 returns 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;
}
该解决方案现在有效。为什么在方法调用中使用++运算符是错误的?
谢谢!
在这种情况下,您不能在方法调用中使用 ++ 因为,var++
递增 var
,但它 returns 原始 var
,这意味着您只是传递 var
。相反,如果您使用 ++var
,它会增加 var
,并传递新增加的值。
原因是当你传递height++
时,该方法以height
值执行,然后height
的值增加1。
height++
是一个 post 递增运算符,它将 height
的值仅在执行 之后 递增 1陈述。 ++height
是预递增运算符,它将在 语句执行之前将 height
的值递增 1 。
如果您在 height
上使用预递增运算符,它可能在根本没有进行第二个 findNodeHeight
调用的情况下正常工作,但可能会在第二个 findNodeHeight
调用是因为它会在第二次调用时更新 height
的值。因此,建议使用 height+1
以防它提供正确的结果,因为增量运算符可能不会始终提供正确的结果。
这是因为
造成的height++
returns height 和 height 加 1 和
height+1
只是 returns 高度+1,它不会增加高度,这也是一个问题。