首页 > 其他 > 详细

二叉树的前序,中序,后序遍历——递归和非递归实现

时间:2020-06-18 18:00:06      阅读:62      评论:0      收藏:0      [点我收藏+]

前序遍历:按照“根-左-右”的顺序遍历。

中序遍历:按照“左-根-右”的顺序遍历。

后序遍历:按照“左-右-根”的顺序遍历。

递归版:

技术分享图片

递归版的代码非常简单,我给大家分析一下原理。

技术分享图片

①我们先忽略中间的打印语句,单独分析这个函数

②遍历顺序是不是这样的。

1->2->4->null->4->null->4->2->5->null->5->null->5->2->1->3->6->null->6->null->6->7->null->7->null->7->3->1

③我们把null去掉。

1->2->4->4->4->2->5->5->5->2->1->3->6->6->6->3->7->7->7->3->1

④里面的每一个数都出现了3次。

⑤若我们将这些数第一次出现就打印。就是先序遍历。

1->2->4->5->3->6->7

⑥若我们将这些数第二次出现就打印。就是中序遍历

4->2->5->1->6->3->7

⑦若我们将这些数第三次出现就打印。就是后序遍历

4->5->2->6->7->3->1

中序遍历代码:

技术分享图片

后序遍历代码:

技术分享图片

非递归版:

先序遍历。①先准备一个栈②先将根节点压入栈③弹出一个节点。打印节点。④若右孩子不为null,就将右孩子压栈。⑤若左孩子不为null,就将左孩子压栈。⑥重复3,4,5步直到栈为空。代码实现

技术分享图片

中序遍历①先准备一个栈②若当前节点不为空,将当前节点压栈,然后来到左孩子③若当前节点为空,弹出一个节点并打印。然后来到右孩子。④当前节点非空或栈不为空执行2,3。代码实现

技术分享图片

后序遍历后序遍历如果只用一个栈来实现有点麻烦。递归版可以做到将一个节点压入栈中3次。自己压栈则有些麻烦。我们采用使用两个栈的方式来实现后序遍历。在实现前序遍历的非递归实现时,①压根节点,②压右节点,③压左节点(根->左->右)这样我们可以①压根节点,②压左节点,③压右节点将它放入一个栈中(根->右->左)然后将上面的栈倒进另一个栈中。就变成了(左->右->根)。为后序遍历顺序。2.代码实现:

技术分享图片

全部代码:

技术分享图片

运行结果:

技术分享图片

转载自https://baijiahao.baidu.com/s?id=1652242076931729515&wfr=spider&for=pc

二叉树的前序,中序,后序遍历——递归和非递归实现

原文:https://www.cnblogs.com/zwb-19981125/p/13158855.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!