样本树:
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。但是我不明白第二个递归调用是如何工作的。
1条答案
按热度按时间w51jfk4q1#
在“then 1”之前,你的想法是正确的。
但是后来:
从左递归返回,回到节点“3”
进入右递归,查看节点“6”
错误的
进入左递归,查看节点“4”
错误的
从左递归返回,回到节点“6”
进入右递归,查看节点“7”
匹配!
返回“6”
返回“3”
返回“8”
返回结果
我遗漏了所有非节点(null,“-1”),它们是用“false”输入和返回的。