一招吃透二叉树遍历

作者:上善若水 来源:公众号码农有道

在通俗易懂讲解 二叉搜索树一文中主要介绍了二叉搜索树的性质,本文将继续介绍二叉树的遍历。

二叉搜索树的遍历

遍历即将树的所有结点访问且仅访问一次。按照根节点位置的不同主要分为前序遍历,中序遍历,后序遍历。注意,二叉搜索树和普通的二叉树其遍历是一模一样的,因此下文中,不区分是二叉搜索树还是二叉树。

前序遍历

对一颗二叉树的前序遍历操作如下:

  • 访问根节点
  • 前序遍历左子树
  • 前序遍历右子树

例如下图中二叉树前序遍历节点访问顺序为3 1 2 5 4 6:

通俗易懂讲解 二叉树遍历

根据前面所分析的前序遍历的操作步骤,不难看出很容易用递归的方法实现二叉树的前序访问:

//前序遍历递归版本void preOrder(struct node *root){ if(root != NULL) { cout << root->data << " "; preOrder(root->left); preOrder(root->right); }}

其实,还能以非递归的方式实现二叉树的前序遍历:由于在遍历完根节点后还要将其找回来以便遍历该根节点对应的右子树,因此可以考虑使用栈来存储访问过的根节点,代码实现如下:

通俗易懂讲解 二叉树遍历

中序遍历

对一颗二叉树的中序遍历操作如下:

  • 中序遍历左子树
  • 访问根节点
  • 中序遍历右子树

例如下图中二叉树中序遍历节点访问顺序为1 2 3 4 5 6:

通俗易懂讲解 二叉树遍历

如同前序遍历一样,也可以用递归或者非递归的方式实现,而且其思想也类似,只是访问的顺序不一样了,其两种实现方式如下:

//中序遍历递归版本void inOrder(struct node *root){ if(root != NULL) { inOrder(root->left); //和前序遍历相比,只是输出语句换了个位置唯一 cout << root->data << " "; inOrder(root->right); }}

通俗易懂讲解 二叉树遍历

后续遍历

对一颗二叉树的后序遍历操作如下:

  • 后序遍历左子树
  • 后序遍历右子树
  • 访问根节点

例如下图中二叉树后序遍历节点访问顺序为2 1 4 6 5 3:

通俗易懂讲解 二叉树遍历

二叉树后序遍历递归版本与前序中序类似,如下:

//后序遍历递归版本void postOrder(struct node *root){ if(root != NULL) { postOrder(root->left); postOrder(root->right); //最后访问根节点 cout << root->data << " "; }}

后序遍历的非递归算法较复杂,使用一个栈可以实现,但是过程很繁琐,我们可以考虑用两个栈来实现后序遍历的非递归算法。注意到后序遍历可以看作是下面遍历的逆过程:即先遍历某个结点,然后遍历其右孩子,然后遍历其左孩子。这个过程逆过来就是后序遍历。算法步骤如下:

(1) push根结点到第一个栈s中。

(2) 从栈s中pop一个结点,将其push到栈output中。

(3) 然后push结点的左孩子和右孩子到第一个栈s中。

(4) 重复过程2和3直到栈s为空。

(5) 现在所有结点已经push到栈output中,且按照后序遍历的顺序存放,直接全部 pop出来即是二叉树后序遍历结果。

代码实现如下:

通俗易懂讲解 二叉树遍历

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 7月 18日 上午9:21
下一篇 2023年 7月 18日 上午9:31

相关推荐

  • 微信和qq发红包攻略

    又到过年了,红包要怎么发?难道又是老一套的在群里抢红包吗?又或者是“阿姨阿姨,不用,太客气了,怎么好意思呢”的画面? 为了让大家更彻底抛弃传统的实物红包,微信、QQ想到了一个“面对…

    2023年 4月 10日
  • 如何将wps转换ppt,wps做的ppt怎么转换为power point

    我们在工作中,有时候需要将文件传输到另一台设备上面,进行展示或者是方便他人查阅。那么有的朋友就发现了,自己如果使用WPS写文档,在分享出去之后,对方有可能因为没有安装WPS而无法打…

    2023年 2月 13日
  • 网络设备交换机的基本原理,计算机网络之交换机的基本原理

    数据链路层:位于网络层与物理层之间 数据链路层的功能 数据链路的建立、维护与拆除 帧包装、帧传输、帧同步 帧的差错恢复 流量控制 X-wire DIX IEEE802.3 千兆以太…

    互联网 2023年 4月 22日
  • 高考后常见的十大“诈骗套路”,一定要警惕

    高考终于落下帷幕 以下这几类针对高考后的骗术 请大家提高警惕 01 “提前查分”诈骗 高考结束,学生和家长最想知道分数,于是诈骗分子会利用考生和家长的急切心理,通过家长群、考试群、…

    互联网 2023年 6月 26日
  • 0基础学java编程大概多久能工作

    在某平台上看到有朋友提问“每天可以自学 Java 编程 6 小时,想找个 8K 工资的工作要学多久?”,考虑到可能会有更多小伙伴们都想了解,在这里源妹儿给大家回答一下~ 学习Jav…

    2023年 4月 19日
  • 如何免费获得优酷vip会员(如何免费获取优酷vip会员)

    本文由什么值得买用户原创:燃烧 为什么要获得优酷VIP会员? 问题是,他是优酷的独播剧,没有会员就追的不过瘾。 那,有低价甚至免费的办法,来获得优酷VIP吗,江湖救急,哪怕就这几个…

    2023年 8月 28日
  • 极客数学小符号,极客数学重点归纳

    小数和我们之前接触数不同,以往我们认为,0之后就没有数字了,其实不然。前人在测量物体时,得到的往往不是整数,所以就发明了小数来补充整数。今天极客数学帮就来和大家谈谈小数这个特殊表现…

    2023年 5月 15日
  • 小红书关于友情的简短文案(小红书链接设计)

    在如今的互联网时代,网站已经成为了企业和个人展示自己的重要窗口。为了让网站更具有吸引力和互动性,友情链接是一个非常重要的组成部分。通过友情链接,可以将不同网站之间的联系和合作更加清…

    互联网 2023年 9月 11日
  • 如何释放手机存储空间,使得手机处于最佳的运行状态

    1、终止后台软件运行程序。 大多数人,一般只是关闭软件在界面上的。对于 A安卓手机来说,这些程序可能还在后台运行。 比如抖音等视频网站,如果后台同时打开几个,运行的内存 RAM 可…

    2023年 3月 19日
  • 怎么样恢复QQ聊天记录最简单方法

    QQ作为国内经典的社交软件,因各个功能方面的突出成为了国内知名的社交软件。怎么恢复QQ聊天记录?因为一些原因导致了QQ聊天记录的丢失,那么我们该怎么找回丢失的QQ聊天记录呢?不必过…

    2023年 1月 1日