您的位置 首页 java

二叉树问题的基础–二叉树遍历(递归、非递归、mirros遍历)

递归

三种遍历方式,递归程序都一样,只是打印时机不一样。

非递归

前序遍历 :遍历顺序为中左右,这里使用栈结构来辅助,放入头节点,弹出之间打印,再把右节点放到栈里,再放左节点,弹出的顺序则会先弹左,再弹右

中序遍历 :遍历顺序为左中右,这里使用栈结构来辅助

后序遍历: 遍历顺序为左右中,这里使用双栈结构来辅助,先实现中右左,然后节点放入到另一个栈中,依次弹出就是左右中了。中右左和前序遍历的代码类似。

mirros遍历

mirros遍历主要是利用了叶子节点为null的引用位置,从而避免新使用栈结构。

mirros的流程主要有三种情况:

1、当前节点无左孩子,当前节点向右移动

2、当前节点有左孩子,当前节点左子树上最右的节点的右孩子为空,让其指向当前节点,节点左移

3、当前节点有左孩子,当前节点左子树上最右的节点的右孩子当前节点,让其指向空,节点右移

这个就是mirros遍历的流程代码,至于三种遍历方式的实现只是打印时机不一样,这和递归方式类似。

递归每个节点都会访问三次的 ,前序遍历就是第一次遇到就打印 中序遍历就是第二次遇到打印 后序遍历是第三次遇到打印

前序遍历: 和递归类似,第一次遇到节点就打印。mirros第一次遇到节点分为两种情况:一种是没有左子树;一种是左子树的最右孩子为空

中序遍历: 和递归类似,第二次遇到节点就打印。没有左子树话第一次和第二次是同一时刻,有左子树第二次是当左子树都处理完,当前节点右移的时候

后序遍历: mirros有左孩子的节点会经过两次,没有左子树的节点只会经过一次,所有永远不会有第三次经过,这时候我们不用管只经过一次的节点,就是没有左子树的节点。我们只需要在第二次经过节点的时候,逆序打印左子树的右边界。最后打印下整棵树的右边界。

希望对大家有所帮助,有帮助记得点赞哦!可以关注下,后面持续分享编程类的文章,谢谢!

文章来源:智云一二三科技

文章标题:二叉树问题的基础–二叉树遍历(递归、非递归、mirros遍历)

文章地址:https://www.zhihuclub.com/197791.shtml

关于作者: 智云科技

热门文章

网站地图