java—如果二叉树中存在节点,则返回true或false请解释一下它的试运行

nwwlzxa7  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(320)

样本树:

8
            3                   10
       1          6         -1       14
     -1 -1    4       7           13    -1
            -1 -1   -1 -1       -1 -1

二叉树和-1,如果您不想添加更多的节点
要搜索的示例元素:7
输出:
是的

public static boolean isNodePresent(BinaryTreeNode<Integer> root,int x){
        if(root==null)
            return false;

        boolean ans=false;

        if(root.data==x)
            return true;

        ans=isNodePresent(root.left,x);
                if(ans)
                return ans;
        ans=isNodePresent(root.right,x);
        return ans;

    }

我想知道递归是如何处理我的示例输入的。
当递归开始时,检查8是否为元素,然后根据此解决方案,如果它是否等于元素,则下一个检查3是否为1、4、13。但是我不明白第二个递归调用是如何工作的。

w51jfk4q

w51jfk4q1#

在“then 1”之前,你的想法是正确的。
但是后来:
从左递归返回,回到节点“3”
进入右递归,查看节点“6”
错误的
进入左递归,查看节点“4”
错误的
从左递归返回,回到节点“6”
进入右递归,查看节点“7”
匹配!
返回“6”
返回“3”
返回“8”
返回结果
我遗漏了所有非节点(null,“-1”),它们是用“false”输入和返回的。

相关问题