数据结构之二叉树详解

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

1 定义

2 前序遍历(根左右)

前序遍历 通俗的说就是从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。

图3.13所示二叉树访问如下:

则3.13所示二叉树的前序遍历输出为:
ABDHIEJCFG

3 中序遍历(左根右)

中序遍历 就是从二叉树的根结点出发,当第二次到达结点时就输出结点数据,按照先向左在向右的方向访问。

图3.13所示二叉树中序访问如下:

则3.13所示二叉树的中序遍历输出为:
HDIBJEAFCG

4 后序遍历(左右根)

后序遍历 就是从二叉树的根结点出发,当第三次到达结点时就输出结点数据,按照先向左在向右的方向访问。

图3.13所示二叉树后序访问如下:

则图3.13所示二叉树的后序遍历输出为:
HIDJEBFGCA

1 定义

2 图解实例

选取一个节点为参照根节点,会发现所有的左侧子节点小于等于参照点,右侧大于等于参照点。

比如根节点9, 9所有的 左侧子节点(5、2、7、1、3) 都小于等于9.

比如根节点13,13所有的 左侧子节点(11、10、12) 都大于等于13.

3 查找

查找节点 10:根节点9开始,10>9 右侧,10<13 左侧,10<11 左侧,找到10.

下图是二叉查找树的极端情况

二叉查找树就是为了提高查询效率,而当前这种和我们写了一堆for循环是一样的。
为了应对这种情况:又出现了平衡二叉树--红黑树。后面会提到。

1 定义

红黑树的特性 :
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。也就是不能有连在一起的红色节点,但是可以有连在一起的黑色节点
(5)满足所有的二叉查找树的性质

红黑树示意图如下:

2 变换规则

左旋又分为两种情况,

(1)我们操作的结点E是整棵树的根节点,那么左旋实现为下面步骤

(2)我们操作的结点E有父结点,那么左旋实现为下面步骤

3)右旋

右旋同样分为两种情况,与左旋情况类似,故实际操作参考左旋。

3 插入

注意 :上述描述中一个很重要的点是,在插入元素时,是将元素作为叶子结点插入的,插入到原红黑树的外部结点。

插入结点染色情况

插入结点后调整和平衡过程

1.变颜色的情况: 当前结点的父亲是红色,且它的祖父结点的另一个结点(也就是叔叔结点)也是红色:

2.左旋:当前父结点是红色,叔叔结点是黑色的时候,且当前的结点时右子树,则进行左旋。左旋过程不需要进行颜色变换。

3.右旋:当前父结点时红色,叔叔结点是黑色的时候,且当前的结点是左子树,则进行右旋。右旋过程中需要进行颜色变换,具体右旋过程如下。

实例讲解

参考视频:
https://www.bilibili.com/video/BV1tE411f7tP?p=4&spm_id_from=pageDriver




麻烦请大神讲解一下数据结构中根据给出的前序中序怎么画出对应的树...
中序:LVR 后序:LRV 2\/6 前序序列{ A B H F D E C K G} 中序序列{ H B D F A E K C G} 这样我们可以确定,我们的根节点是A,然后在中序中根据 A 的位置,可以确定 L(HBDF)和 R(EKCG)取出 A,画出二叉树 查看剩余1张图 3\/6 继续根据 前序:VLR 中序:LVR 的规...

数据结构 设一棵树T中边的集合为{(A,B),(A,C),(A,D),(B,E),(C,_百 ...
1、画出该树 :如下图左边所示。然后根据树的二叉链表表示法表示存储结构如图右边所示:注意这里的指针域为左边表示第一个孩子*firstchild,右边表示兄弟*nextsibling 2、接着进行树与二叉树的转换就可以得到结果了,核心思想:左子树放孩子,右子树放兄弟,则有如图所示的二叉树:...

设一颗完全二叉树共有700个结点 ,则该二叉树中有---个叶子结点。_百度...
如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :①n= n0+n1+n2 (其中n为完全二叉树...

二叉树遍历的算法实现
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:⑴访问结点本身(N),⑵遍历该结点的左子树(L),⑶遍历该结点的右子树(R)。以上三种操作有六种执行次序:NLR、LNR、LRN、NRL、RNL、RLN。注意:前三种...

设一棵二叉树的前序序列为1,2,3,4,5,6,7,8,9,其中序序列为2,3,1,5...
(2)紧接着上面的分析,回到前序遍历来观察dgb(左子数的中序)对应的前序为:bdg,所以左子数的根节点为b,同样的道理,回到中序结果dgb,知道dg为左子树,b没有右子树。依照这种规律分析下去,可以完整的分析出这棵树的结构,然后就可以得到后序结果了。后序:gdbehfca ...

(53) 已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍 ...
接下来据后序得出e结点是紧挨着c结点的左子女,再据中序得知d是e的左子女,ba是右子树。再据后序得b是e的右子女,再据中序得a是b的右子女。分析结果得二叉树图示如下:因为我数据结构是自学的,分析此类型的题我都是用自己的方法(递归分析的方法),要边分析边画图,一步一步连结起来,最后再...

用一组{14,15,30,28,5,10}关键字序列,写出初始建堆过程图示,再根据初 ...
(1)因此起始堆的情况如下:1415 3028 5 10 (2)假设是打算得到一个从小到大的c,所以需要建大顶堆,起始状态从下向上建堆:第一步: 第二步:14 3028 30 28 1425 5 10 25 5 10 (3)此时已经建立完了初始的堆。此时堆顶元素30即为最大元素,将堆顶元素与堆最后一个元素进行交换,此时30是...

将树、森林转化为二叉树的基本目的是什么?
根据树与二叉树的转换关系以及二叉树的遍历定义可以推知,树的先序遍历与其转换的相应的二叉树的先序遍历的结果序列相同;树的后序遍历与其转换的二叉树的中序遍历的结果序列相同;树的层序遍历与其转换的二叉树的后序遍历的结果序列相同。由森林与二叉树的转换关系以及森林与二叉树的遍历定义可知,森林的...

求数据结构树与二叉树转换C语言代码
(A(B(E(K,L),F),C(G),D(H(M),I,J)))5. 2 二叉树 1.二叉树的基本形态:二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:(1)空二叉树——(a);(2)只有一个根结点的二叉树——(b);(3)右子树为空的二叉树——(c);(4)左子树为空的二叉树——(d...

二叉树结点数怎么算?
完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是...

平邑县13490615630: 二叉树是什么意思 -
墨菡迈克: 二叉树是一类非常重要的树形结构,它可以递归地定义如下:二叉树T是有限个结点的集合,它或者是空集,或者由一个根结点u以及分别称为左子树和右子树的两棵互不相交的二叉树u(1)和u(2)组成.若用n,n1和n2分别表示T,u(1)和u(2)的结点数,则有n=1+n1+n2 .u(1)和u(2)有时分别称为T的第一和第二子树.

平邑县13490615630: 数据结构 二叉树 -
墨菡迈克: 先介绍一下树:1.树的定义 树是一种常见的非线性的数据结构.树的递归定义如下: 树是n(n>0)个结点的有限集,这个集合满足以下条件: ⑴有且仅有一个结点没有前件(父亲结点),该结点称为树的根; ⑵除根外,其余的每个结点都有且仅...

平邑县13490615630: 数据结构二叉树 -
墨菡迈克: 二叉树的定义:二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成.(在某个阶段都是两种结果的情形) 二叉树的特点有:*每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点.*左子树和右子树是有顺序的,次序不能任意颠倒.*即使树中某结点只有一棵子树,也要区分它是左子树还是右子树.二叉树具有五种基本形态:1.空二叉树.2.只有一个根结点.3.根结点只有左子树.4.根结点只有右子树.5.根结点既有左子树又有右子树.

平邑县13490615630: 二叉树相关知识 -
墨菡迈克: 二叉树 (binary tree) 是另一种树型结构,它的特点是每个结点至多只有二棵子 树 (即二叉树中不存在度大于 2的结点 ),并且,二叉树的子树有左右之分,其次序不能任意颠倒 . 二叉树是一种数据结构 :Binary_tree=(D,R)其中: D是具有...

平邑县13490615630: 什么是二叉树,求详解
墨菡迈克:这个的数据结构中的内容 就是n个结点 由根节点和两颗互不相交的,分别称为左右子树的二叉树组成

平邑县13490615630: 数据结构中什么是二叉树
墨菡迈克: 树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样.树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示.树在计算机领域中也得到广泛应用,如在编译源程序如下时,可用树表示源源程序如下的语法结构.又如在数据库系统中,树型结构也是信息的重要组织形式之一.一切具有层次关系的问题都可用树来描述.满二叉树,完全二叉树,排序二叉树.

平邑县13490615630: 二叉树,图怎么理解 -
墨菡迈克: 1.二叉树的基本形态: 二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态: (1)空二叉树——(a); (2)只有一个根结点的二叉树——(b); (3)右子树为空的二叉树——(c); (4)左子树为空的二叉树——(d); (5)完全二叉树...

平邑县13490615630: 什么是二叉树
墨菡迈克: 这是计算机编程数据结构里的一个东西,是一种计算机数据结构, 顺序搜索加分支的.... 形象地说,就是从一个数据开始(“根”),顺序遍历一个数据库, 其中包括分支,搜索到头再回到分支处通过另一条路.... 即像树的生长一样...

平邑县13490615630: 二叉树是什么?二叉树的最小元素数目怎么求? -
墨菡迈克: 二叉树的概念 二叉树是一种很重要的非线性数据结构,它的特点是每个结点最多有两个后件,且其子树有左右之分(次序不能任意颠倒). 1、二叉树的递归定义和基本形态 二叉树是以结点为元素的有限集,它或者为空,或者满足以下条件: ...

平邑县13490615630: 数据结构之二叉树 -
墨菡迈克: 兄弟~~~ 我们今天刚上级啦~~ 我的编译成功啦~~ 建立二叉树输出先序中序后序遍历~~ 可以直接输入表达式~~ 就是我们上机没这个要求啊~~ 不过这个应该对你有帮助的·~如下~~#include <stdio.h>#include <malloc.h>#define maxsize 1024#...

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