Python_12_树-基础知识-二叉树-完全二叉树-斜树

1. 树

  树在数据结构中属于一种非线性结构,每个元素可以有多个前驱和后继,它有如下定义:
树是 n (n≥0) 个元素的集合:

  • n = 0 时,成为空树
  • 树只有一个特殊的没有前驱的元素,称为数的根 Root
  • 树中除了根结点外,其余元素只能有一个前驱,可以有零个或者多个后继

递归定义:

  • 树 T 是 n (n≥0) 个元素的集合。n = 0 时,成为空树
  • 有且只有一个特殊元素根,剩余元素都可以被划分为 m 个互不相交的集合 T1,T2,…,Tm,而每一个集合都是树,成为 T 的子树 Subtree
  • 子树也有自己的根

2. 树的概念

树是一个非常抽象的概念,下面主要介绍树中各种名词的含义:

名称含义
结点树中的数据元素
树的度树内各结点的度的最大值
结点的度 (degree)结点拥有的子树的数目成为度,记作 d (v)
叶子结点结点的度数为 0,称为叶子结点 leaf、终端结点、末端结点
分支结点结点度数不为 0,称为非终端结点或分支结点
分支结点之间的关系
内部结点除根结点外的分支结点,当然也不包括叶子结点
孩子 (儿子 Child) 结点结点的子树的根结点成为该结点的孩子
双亲 (父 Parent) 结点一个结点是它各个树的根结点的双亲
兄弟 (Sibling) 结点具有相同双亲结点的结点
祖先结点从根结点到该结点所经分支上所有的结点。
子孙结点结点的所有子树上的结点都成为该结点的子孙。
结点的层次 (Level)根结点为第一层,根的孩子为第二层,依次类推记作 (Lv)
树的深度 (高度 Depth)树的层次的最大值
堂兄弟双亲在同一层的结点
有序树结点的子树是有顺序的 (兄弟有大小,有先后次序),不能交换
无序树结点的子树是无序的,可以交换
路径树中的 k 个结点 n1、n2、…nk,满足 ni 是 n (i+1) 的双亲,成为 n1 到 nk 的一条路径。就是一条线串下来的,前一个都是后一个父 (前驱) 结点。
森林m (m≥0) 棵不相交的树的集合,对于结点而言,其子树的集合就是森林。

TREE

3. 树的特点

下面我们来总结一下树的特点:

  1. 唯一的根
  2. 子树不相交
  3. 除了根以外,每个元素只能有一个前驱,可以有零个或多个后继
  4. 根结点没有双亲结点 (前驱),叶子结点没有孩子结点 (后继)
  5. vi 是 vj 的双亲,则 L(vi) = L(vj) - 1 ,也就是说双亲比孩子结点的层次小 1

堂兄弟的双亲是兄弟关系吗?

  1. 堂兄弟定义是:双亲结点在同一层的结点
  2. 上图 J 和 K 是堂兄弟,因为它们的双亲结点 D 和 F 在第三层,依然是堂兄弟
  3. 因此,堂兄弟的双亲不一定是兄弟关系

4. 二叉树

二叉树是一种特别的树,它有如下特点:

  • 每个结点最多 2 棵子树,即二叉树不存在度数大于 2 的结点
  • 它是有序树,左子树、右子树是顺序的,不能交换次序
  • 即使某一个结点只有一棵子树,也要确定它是左子树还是右子树

二叉树的五种基本形态:

  1. 空二叉树
  2. 只有一个根结点
  3. 根结点只有左子树
  4. 根结点只有右子树
  5. 根结点有左子树和右子树

4.1. 斜树

分为左斜树和右斜树:

  • 左斜树:所有结点都只有左子树
  • 右斜树:所有结点都只有右子树

xieshu

4.2. 满二叉树

满二叉树有如下特点:

  1. 一棵二叉树的所有分支结构都存在左子树和右子树,并且所有叶子结点只存在在最下面一层。
  2. 同样深度二叉树中,满二叉树的结点最多
  3. K 为深度 (1≤k≤n), 则结点总数为 2^k - 1
  4. 下面是一个深度为 4 的 15 个结点的满二叉树

manerchashu

4.3. 完全二叉树

完全二叉树的特点:

  1. 若二叉树的深度为 k,二叉树的层数从 1 到 k-1 层的结点数都达到了最大个数,在第 k 层的所有结点都集中在最左边,这就是完全二叉树
  2. 完全二叉数由满二叉树引出
  3. 满二叉树一定是完全二叉树,但完全二叉树不是满二叉树
  4. k 为深度 (1≤k≤n), 则结点总数的最大值为 2^k - 1, 当达到最大值的时候就是满二叉树
  5. 下面是一个深度为 4 的完全二叉树

wanquanerchashu
wanquanerchashu

注意:完全二叉树 K 层结点都靠左排列,否则不能称为完全二叉树

4.4. 二叉树的性质

下面列举一些二叉树的特性,

4.4.1. 性质 1

在二叉树的第 i 层上至多有 2^(i-1) 个结点 (i≥1)
xingzhi1

以上图为例当 i 等于 4 时,那么第 4 层最多含有 2^(4-1),也就是 8 个元素

4.4.2. 性质 2

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

4.4.3. 性质 3

对任何一棵二叉树 T,如果其终端结点为 n0, 度数为 2 的结点为 n2,则有 n0 = n2 + 1。换一句话说,就是 叶子结点数 - 1 = 度数为 2 的结点数
证明:

  1. 总结点数为 n=n0+n1+n2,n1 是度数为 1 的结点总数。
  2. 一棵树的分支结点为 n-1,因为除了根结点外,其余结点都有一个分支,即 n0+n1+n2-1
  3. 分支数还等于 n00+n11+n22,n2 是 2 分支结点所以乘以 2,2m2+n1
  4. 可得 2*n2+n1=N0+n1+n2-1 ==> n2=n0-1

4.4.4. 性质 4

具有 n 个结点的完全二叉树的深度为 int (log2n) + 1 或者 math.ceil (log2 (n+1))

4.4.5. 性质 5

如果有一棵 n 个结点的完全二叉树 (深度为性质 4)

xingzhi4

  • 如果 i=1, 则结点 i 是二叉树的根,无双亲;如果 i>1,则其双亲是 int (i/2), 向下取整。就是子结点的编号整出 2 得到的就是父结点的编号。父结点如果是 i,那么左孩子为 2i,右孩子结点就是 2i+1。
  • 如果 2i>n,则结点 i 无左孩子,即结点 i 为叶子结点;否则其左孩子结点存在编号为 2i。
  • 如果 2i+1>n,则结点 i 无右孩子,注意这里并不能说明结点 i 没有左孩子;否则右孩子结点存在编号为 2i+1.

4.4.6. 其他性质

  1. 高度为 k 的二叉树,至少有 k 个结点。
  2. 含有 n (n≥1) 的结点的二叉树高度至多为 n。
  3. 含有 n (n≥1) 的结点的二叉树的高度至多为 n,最小为 math (log2 (n+1)),不小于对整数值的最小整数,向上取整。
  4. 假设高度为 h, 2^h-1=n ==> h=log2 (n+1), 层数是取整。如果是 8 个结点,3.1699 就要向上取整为 4,即 4 层
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值