【小白学算法】8.二叉树的遍历,前序、中序和后序

作者&投稿:尧药 (若有异议请与网页底部的电邮联系)
~

二叉树的遍历,同样也是为了访问到树中的每个结点(仅一次)。不过,由于树的结构与之前的线性存储不同,从根结点开始,二叉树可以有多种的访问次序的选择。按照我们通常的从左到右的习惯,常见的遍历次序有3种:前序、中序、后续。

一、什么是前序、中序、后序

为了方便说明,暂且我们把访问结点,就当做是打印输出这个结点信息。那么如何区分前中后,也正是根据输出的先后顺序来定的。

前序遍历:先输出父节点,再遍历左子树,然后遍历右子树。

中序遍历:先遍历左子树,再输出父节点,然后遍历右子树。

后序遍历:先遍历左子树,再遍历右子树,最后输出父节点。

如图所示的二叉树,它的前中后输出顺序分别就是:

前序:1易大师、2寒冰射手、3盲僧、4盖伦

中序:2寒冰射手、1易大师、3盲僧、4盖伦

后序:2寒冰射手、4盖伦、3盲僧、1易大师

二、代码实现前、中、后序遍历

实现思路很简单:

1、创建英雄结点,在这里编写遍历方法。

2、创建二叉树,调用遍历方法。

3、main方法进行测试。

运行测试遍历顺序与上面预测的相符合。本章我们知道了遍历二叉树,那如果我要查找二叉树中某一个结点,前中后序这3种的查找思路又是怎样呢?

例题:

已知某二叉树的前序遍历为A-B-D-F-G-H-I-E-C,中序遍历为F-D-H-G-I-B-E-A-C,请还原这棵二叉树。

解题思路:

从前序遍历中,我们确定了根结点为A,在从中序遍历中得出F-D-H-G-I-B-E在根结点的左边,C在根结点的右边,那么我们就可以构建我们的二叉树的雏形。

那么剩下的前序遍历为B-D-F-G-H-I-E,中序遍历为F-D-H-G-I-B-E,B就是我们新的“根结点”,从中序遍历中得出F-D-H-G-I在B的左边,E在B的右边,继续构建。

那么剩下的前序遍历为D-F-G-H-I,中序遍历为F-D-H-G-I,D就是我们新的“根结点”,从中序遍历中得出F在D的左边,H-G-I在D的右边,继续构建。

那么剩下的前序遍历为G-H-I,中序遍历为H-G-I,G就是我们新的“根结点”,从中序遍历中得出H在G的左边,I在G的右边,继续构建。



二叉树的遍历,同样也是为了访问到树中的每个结点(仅一次)。不过,由于树的结构与之前的线性存储不同,从根结点开始,二叉树可以有多种的访问次序的选择。按照我们通常的从左到右的习惯,常见的遍历次序有3种:前序、中序、后续。

一、什么是前序、中序、后序

为了方便说明,暂且我们把访问结点,就当做是打印输出这个结点信息。那么如何区分前中后,也正是根据输出的先后顺序来定的。

前序遍历:先输出父节点,再遍历左子树,然后遍历右子树。

中序遍历:先遍历左子树,再输出父节点,然后遍历右子树。

后序遍历:先遍历左子树,再遍历右子树,最后输出父节点。

如图所示的二叉树,它的前中后输出顺序分别就是:

前序:1易大师、2寒冰射手、3盲僧、4盖伦

中序:2寒冰射手、1易大师、3盲僧、4盖伦

后序:2寒冰射手、4盖伦、3盲僧、1易大师

二、代码实现前、中、后序遍历

实现思路很简单:

1、创建英雄结点,在这里编写遍历方法。

2、创建二叉树,调用遍历方法。

3、main方法进行测试。

运行测试遍历顺序与上面预测的相符合。本章我们知道了遍历二叉树,那如果我要查找二叉树中某一个结点,前中后序这3种的查找思路又是怎样呢?

例题:

已知某二叉树的前序遍历为A-B-D-F-G-H-I-E-C,中序遍历为F-D-H-G-I-B-E-A-C,请还原这棵二叉树。

解题思路:

从前序遍历中,我们确定了根结点为A,在从中序遍历中得出F-D-H-G-I-B-E在根结点的左边,C在根结点的右边,那么我们就可以构建我们的二叉树的雏形。

那么剩下的前序遍历为B-D-F-G-H-I-E,中序遍历为F-D-H-G-I-B-E,B就是我们新的“根结点”,从中序遍历中得出F-D-H-G-I在B的左边,E在B的右边,继续构建。

那么剩下的前序遍历为D-F-G-H-I,中序遍历为F-D-H-G-I,D就是我们新的“根结点”,从中序遍历中得出F在D的左边,H-G-I在D的右边,继续构建。

那么剩下的前序遍历为G-H-I,中序遍历为H-G-I,G就是我们新的“根结点”,从中序遍历中得出H在G的左边,I在G的右边,继续构建。




计算机小白学IT要从哪开始学?
作为一个计算机小白学IT的入门,首先要了解计算机的基本原理和组成部分。***1. 计算机基础知识:了解计算机的工作原理、硬件组成和软件系统等基本概念。学习计算机的历史、发展和分类,掌握计算机的基本术语和概念。2. 编程语言:选择一门编程语言作为入门语言,例如Python、Java、C++等。学习编程语言的语法和...

零基础如何学编程?
学编程入门建议:1.学编程要从根本出发,从理论上来说,需要广泛的阅读。了解算法的博大精深和计算机的基本理论。2.从实践上来说,需要有广泛的练习,练习的广泛在于练习不同的内容。然后就是创新精神和数学思维能力,这些都是需要培养的。基础要打好学编程要具备一定的基础。3.逻辑思维能力的培养、学...

太强了!100个Python算法实例.pdf 看完这100个Python算法实例,超越90%...
在编程世界中,算法犹如灵魂,无论使用Java、Python还是PHP,掌握算法都是程序员必备的技能。各大公司面试时,算法能力是筛选人才的重要考量。这篇文章推荐《100个Python算法实例.pdf》,它以12个章节、570页的详实内容,帮助你跨越算法难关,提升编程技能。本书将算法学习分解为实践过程:从问题描述到问题...

小白学ai教程容易吗小白学ai教程容易吗安全吗
1. 学习基础知识:在深入学习AI之前,建议先学习计算机科学、编程语言(如Python、Java等)和数学(线性代数、概率论等)基础知识。这些知识有助于理解AI的原理和算法。2. 选择适合的教程:挑选适合初学者的AI教程,从基础概念入手,逐步深入。教程应具备清晰的讲解、实用的案例和适量的练习题,以便巩固所学...

编程小白怎么学习Python呀?
0基础小白学习Python,要选择合适的学习方式、学习资料及学习路线,以下是老男孩教育的学习大纲,你可以参考一下:阶段一:Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。阶段二:Python...

京东怎么查看上个月小白信用分
1、找到手机【京东】APP,如图所示,点击登录进入京东首页。2、在首页右下角找到【我的】图标,如图所示,点击该图标进入【我的】主页。3、在我的主页下,观察页面右上角,找到一个齿轮状的图标,如图所示,点击该图标进入【账户设置】主页。4、在账户设置主页下,找到【账户与安全】一栏,如图所示,...

小白守约多少分可以开通金条
小白信用分的高低与开通金条没有关系,也就是说,即使分数偏低,只要是符合金条的开通条件,也是有几率开通金条的。相反,小白信用分再高,但是不满足金条开通条件,这样是无法通过系统审核的,那么也就无法成功开通金条。因此,用户申请开通金条时,小白信用分的影响可以忽略不计,大家关注自己是否符合开通...

小白应该了解点儿人工智能
在机器学习中,算法与变量相结合才可以创建数学模型。 5.人工智能分为广义和狭义。广义就是您在科幻世界想象出来的,有自主意识的人工智能可以替代人类所有的工作?但目前,人工智能仅仅能够做到的是辅助人类决策,即狭义人工智能。简单讲,狭义人工智能其实就是利用数学进行预测的工具,一种用于预测的数学方法。通过分析一个...

小白如何秒懂区块链中的哈希计算
说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用...

新手学编程应该先学什么?
首先来回答您的问题 所有编程初始都要学习代码中的语言,最基础的就是C语言,当你稍微了解C语言,可以尝试学一学当今就业比较好的Java语言。接着考虑C++,相对于C语言比较高难度。我们面对新的编程语言时,只需简单了解该语言的语法特点,就可以轻松应对和应用了。刚开始掌握一门语言即可,毕竟以后工作...

湘阴县19232931353: 二叉树的前、中、后三种遍历的解答方法? -
福很依立: 二叉树的遍历: (1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树; (2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树; (3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点.

湘阴县19232931353: 二叉树的三种遍历,先,中,后遍历 -
福很依立: 先序就是先遍历根,再遍历左子树,再遍历右子树.例如上图的先序遍历是:ABCDEFGHK中序就是先遍历左子树,再遍历根,再右子树.例如上图的中序遍历是:BDCAEHGKF后序就是先遍历左子...

湘阴县19232931353: 何谓二叉树的遍历? -
福很依立: 就是按照一定的顺序访问二叉树中的每一个节点.顺序一般有先序遍历,中序遍历和后序遍历 1.中序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: (1)遍历左子树; (2)访问根结点; (3)遍历右子树.2.先序遍历的递归算...

湘阴县19232931353: 二叉树的遍历? -
福很依立: 遍历方案从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次序执行三个操作:(1)访问结点本身(N),(2)遍历该结点的左子树(L),(3)遍历该结点的右子树(R)...

湘阴县19232931353: 二叉树根据图片怎么算遍历 -
福很依立: 前序中序后序指的是节点的访问顺序, 前序就是先访问节点, 再用前序遍历访问节点的左子树, 最后用前序遍历访问节点的右子树.中序遍历就是先用中序遍历访问节点的左子树, 再访问节点, 最后用中序遍历访问节点的右子树.后序遍历是先...

湘阴县19232931353: 二叉树前序遍历法举例!急急急!!! -
福很依立: 二叉树的三种金典遍历法1.前序遍历法: 前序遍历(DLR)前序遍历(DLR) 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树.在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树.若二叉树为空则结...

湘阴县19232931353: 什么是二叉树数的遍历 -
福很依立: 二叉树遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问.访问结点所做的操作依赖于具体的应用问题.遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础. 遍历方案 从二叉树的递归定...

湘阴县19232931353: C++中二叉树的前序(后序、中序)遍历分别是什么意思?相应的树图怎么看? -
福很依立: 二叉树的遍历是指按照一定次序访问树中所有结点,并且每个节点仅被访问一次的过程. 1、先序遍历(前序) (1)访问根节点; (2)先序遍历左子树; (3)先序遍历右子树. 2、中序遍历 (1)中序遍历左子树; (2)访问根节点; (3...

湘阴县19232931353: 下面二叉树的前序遍历,中序遍历,后序遍历分别为什么? -
福很依立: 中序遍历结果是DBEAFC,前序遍历结果是ABDECF,则后序遍历结果是DEBFCA (因为前序遍历结果是ABDECF,知道根结点为A,中序遍历结果是DBEAFC,知道DBE为左子树,FC为右子树,再推出DE是B的叶子结点,F是C的叶子结点...

湘阴县19232931353: c语言 二叉树的遍历 -
福很依立: //---------------------------------------------------------------------------#include<iostream> using namespace std; typedef struct node { struct node *L,*R; string name; }NODE;//输入 void Input(NODE **T,int num) { string name; int L,R; *T = new NODE[num]; for (...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网