4.树和二叉树——数据结构 (严蔚敏C语言版)

本文详细介绍了树和二叉树的基本概念,包括树的定义、术语,如结点、度、叶节点、二叉树等。讨论了二叉树的特性,如每个结点最多有两个子节点,以及满二叉树和完全二叉树的定义。此外,还涵盖了二叉树的遍历方法,如先序、中序和后序遍历,以及相关操作,如创建、复制和计算深度。最后,提到了二叉树的存储方式,包括顺序存储和链式存储。
摘要由CSDN通过智能技术生成

4.树

4.1树的定义

树(Tree)是n(n≥0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T:

  • (1)有且仅有一个称之为根的结点;
  • (2)除根结点以外的其余结点可分为m (m>0)个互不相交的有限集T1, T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树( SubTree )。

4.2树的基本术语

在这里插入图片描述

1.结点: 树中的一个独立单元。包含一个数据元素及若干指向其子树的分支,如中的A、B、C、D等。
2. 结点的度: 结点拥有的子树数称为结点的度。例如,A的度为3,C的度为1,F的度为0。(注:度是n,就产生n条边)
3. 树的度: 树的度是树内各结点度的最大值。上图树的度为3。
4. 叶子: 度为0的结点称为叶子或终端结点。结点K、L、F、G、M、I、J都是树的叶子。
5. 非终端结点: 度不为0的结点称为非终端结点或分支结点。除根结点之外,非终端结点也称为内部结点。
6. 双亲和孩子: 结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲。例如,B的双亲为A,B的孩子有E和F。
7. 兄弟: 同一个双亲的孩子之间互称兄弟。例如,H、Ⅰ和J互为兄弟。
8. 祖先: 从根到该结点所经分支上的所有结点。例如,M的祖先为A、D和H。
9. 子孙: 以某结点为根的子树中的任一结点都称为该结点的子孙。如B的子孙为E、K、L和F。
10. 层次: 结点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一结点的层次等于其双亲结点的层次加1。
11. 堂兄弟: 双亲在同一层的结点互为堂兄弟。例如,结点G与E、F、H、I、J互为堂兄弟。
12. 树的深度: 树中结点的最大层次称为树的深度或高度。图所示的树的深度为4。
13. 有序树和无序树: 如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
14. 森林: 是m ( m≥0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。由此,也可以用森林和树相互递归的定义来描述树。

4.二叉树

为何要研究二叉树:

  • 所有树都能转为唯一对应的二叉树,不失一般性。
  • 普通树(多叉树)若不转化为二叉树,则运算很难实现。
  • 简单,规律性强。

4.1 二叉树的定义

二叉树: 二叉树是n(n≥O)个结点的有限集,它或者是空集(n= 0),或者由一个根结点及两棵互不
相交的分别称作这个根的左子树和右子树的二叉树组成。

二叉树特点:

  1. 每个结点最多有俩孩子 (二叉树中不存在度大于2的结点)。
  2. 子树有左右之分,其次序不能颠倒。
  3. 二叉树可以是空集合,根可以有空的左子树或空的右子树。

注:

  1. 二叉树不是树的特殊情况,它们是两个概念。二叉树结点的子树要区分左子树和右子树,即使只有一棵子树也要区分,说明它是左子树,还是右子树。
  2. 树当结点只有一个孩子时,就无须区分它是左还是右的次序。因此二者是不同的。这是二叉树与树的最主要的差别。

在这里插入图片描述
在这里插入图片描述

(也就是二叉树每个结点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而树的结点位置是相对于别的结点来说的,没有别的结点时,它就无所谓左右了),

4.2二叉树的基本形态

在这里插入图片描述

4.3二叉树基本操作

  1. PreOrderTraverse (T)
    初始条件: 二叉树T存在。
    操作结果: 先序遍历T,对每个结点访问一次。
  2. InorderTraverse (T)
    初始条件: 二叉树T存在。
    操作结果 : 中序遍历T,对每个结点访问一次。
  3. PostOrderTraverse (T)
    初始条件: 二叉树T存在。
    操作结果: 后序遍历T,对每个结点访问一次。
  4. CreateBiTree(&T,definition)
    初始条件:definition给出二叉树T的定义。
    操作结果:按definition构造二叉树T。

4.4二叉树的性质

4.4.1 性质1

  • 在二叉树的第i层上至多有2^(i-1)个结点(i≥1)。
    在这里插入图片描述

4.4.2 性质2

  • 深度为k的二叉树至多有(2^k )- 1个结点(k ≥1)。

4.4.3 性质3

  • 对任何一棵二叉树T,如果其叶子数为n,度为2的结点数为n2,则n0 = n2+ 1。(n0:叶子节点)
  • 总边数为B = n - 1=n2×2+n1
4.4.3.1 满二叉树

满二叉树: —棵深度为k且有力2^k-1个结点的二叉树称为满二叉树。
在这里插入图片描述

特点:

  1. 每一层上的结点数都是最大结点数(即每层都满)。
  2. 叶子节点全部在最底层对满二叉树结点位置进行编号。
  3. 编号规则:从根结点开始,自上而下,自左而右。每一结点位置都有元素。
4.4.3.1 完全二叉树

完全二叉树: 深度为k 的具有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应时,称之为完全二叉树。

在这里插入图片描述

在这里插入图片描述

下面是不是呢

在这里插入图片描述

特点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值