一招吃透二叉树遍历

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

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

二叉搜索树的遍历

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

前序遍历

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

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

例如下图中二叉树前序遍历节点访问顺序为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

相关推荐

  • 苹果怎么设置第三方浏览器为默认

    据彭博社近期报道,苹果正在考虑打破 2008 年以来的规定,允许用户将第三方应用程序,如 Chrome 或 Gmail 等,设置为 iOS 14 中的默认应用。 虽然放开的空间很小…

    2023年 9月 25日
  • 租保障房要申请什么条件(精装公寓房租赁租金)

    最近,北京经济技术开发区发布面向毕业大学生对接保障性租赁住房亦嘉·新青年小镇等项目专项配租公告,将本区3个项目,400套房源开展配租。 亦嘉·新青年小镇项目(150套) 项目位置:…

    2023年 8月 2日
  • mpp电力管生产厂家怎么选

    河北塑龙管道:mpp专业制造12年。 mpp电力管厂家如何选择可靠的?塑龙管道有以下建议: 1、首先评估mpp电力管厂家的产品质量和服务水平,包括产品质量、生产过程和可靠性,以确保…

    2023年 4月 19日
  • 百度极速版账号显示存在账号风险

    近日,有部分百度极速版用户反映,在参与百度极速版的各种活动时,出现了“账号异常,无法参与活动”的提示。这让一些用户感到困惑和不满,不知道如何解决这个问题。 百度极速版是百度推出的一…

    互联网 2023年 8月 22日
  • 从数字就能看出一个人的信息

    不说话、不出门、不社交,信息也会被盗。只需提供这些数字如手机号、身份证号/护照号、银行卡号、微信号、QQ号等 就能查到你的户籍、身份证正反面、婚姻状况、开房记录、犯罪记录、交通轨迹…

    2023年 9月 9日
  • 无线监控摄像头和手机怎样安装说明书

    无线监控摄像头是一种针对于一个地方的周围环境进行实时远程监控作用的监控系统一部分。它的具体表现为利用手机app或者电脑,平板客户端,远程实时监控摄像机拍摄的视频画面。它所运用的领域…

    2023年 4月 26日
  • 奥维互动地图快速加载谷歌地图,奥维互动地图v9.0.8添加谷歌地图

    奥维互动地图集成Google地图、卫星图、地形图、Bing卫星图、等高线地图、三维地图、百度地图、搜狗地图、全球地图离线下载、全球语音导航、好友位置分享、记录轨迹、实时路况、指南针…

    2023年 7月 18日
  • 浏览器刚进无法访问此页面

    演示机型:华为MateBook X 系统版本:win10 浏览器无法访问此页面共有3步。以下是华为MateBook X中解决浏览器无法访问此页面的具体操作步骤: 操作/步骤 1 打…

    2022年 12月 29日
  • 微信红包有新的玩法吗

    很快就要迎来2023年春节了 春节必不可少的娱乐项目 就是发红包、抢红包 新一轮抢红包大战即将上演 你准备好要发红包了吗? 微信带来春节红包玩法和红包福利 是时候来让我们 “前兔似…

    2023年 2月 2日
  • 电脑如何安装新字体,如何把字体安装到电脑

    我们在使用电脑办公的时候,系统自带的字体不能满足我们工作和日常使用,难免需要给电脑安装一些新的字体,今天小编和大家分享下如何给电脑安装新字体? 方法/步骤: 本次以win7系统,王…

    2023年 11月 4日