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,它不会增加高度,这也是一个问题。