ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-二叉树递归InOrder方法的困惑

2019-11-10 22:00:29  阅读:428  来源: 互联网

标签:binary-search-tree java recursion


我正在为数据结构类在Red Black树上工作.

我有代码:

void printInorder(Node node)    //Input is initially the root node 
{ 
     if (node == null) 
     { 
           return; 
     } 
     printInorder(node.left); 
     System.out.println(node.data); 
     printInorder(node.right); 
} 

让我们以这个二叉树为例:

           50 
          /    \ 
       40     60 
      /    \       \ 
     20    45      70 
        /   \      / 
        43  47  65 

该代码的输出是正确的,并且是:20 40 43 45 47 50 60 65 70

我对代码的理解是,它将递归调用printInorder(node.left)直到达到20.

到那时,它将打印“ 20”,然后检查printInorder(node.right),发现它为空,然后返回到printInorder(node.right)语句,此时它位于页面的底部.方法,没有更多的代码可以运行,因此退出.

输出是正确的,但是根据我对代码的理解,它应该在打印“ 20”后停止.

有人可以为我逐步解释此递归循环的过程吗?请假装您正在向有精神障碍的人解释它.谢谢.

解决方法:

有一个笑话“要了解递归,首先应该了解递归”

首先让我们看一下功能.它有什么作用?

>检查是否有左节点,是否有左节点(尚未打印)
>如果没有左节点打印
>检查是否有正确的节点,然后转到那里.

所以这里执行.

>第一次执行printInorder(50)
检查是否剩余-转到左侧节点(打印等待)
>现在使用左节点printInorder(40)进行第二次执行
检查是否有左节点-是的!转到左侧,等待打印
>第三个执行,带有左节点printInorder(20)
它有左节点吗?没有!调用printInorder(null)并继续执行.
现在打印20张!它有正确的节点吗?没有
>我们回去!到我们有printinorder(40)的步骤2,但是现在我们到了leftNode之后.因此,我们打印出该40并检查右节点-发现voila 45!
>转到45,检查是否有左节点(打印45等待).左节点是43
>转到printinorder(43),因为它没有剩余打印了!

等等…

标签:binary-search-tree,java,recursion
来源: https://codeday.me/bug/20191110/2015486.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有