数据结构-二叉树

2020-05-21  本文已影响0人  鼬殿

树的基本概念

树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树

普通树
在任意一颗非空树中:

树的深度 等于 树的高度

二叉树(Binar y Tree)

普通二叉树

二叉树的特点

  1. 每个结点的度最大为 2(最多拥有 2 棵子树)
  2. 左子树和右子树是有顺序的
  3. 即使某结点只有一棵子树,也要区分左右子树

二叉树是有序树

二叉树的性质

  1. 非空二叉树的第i层,最多有 2^(i − 1) 个结点(i ≥1)
  2. 在高度为h的二叉树上最多有 2^h - 1个结点( h≥1)
  3. 对于任何一棵非空二叉树,如果叶子结点个数为n0,度为2的结点个数为 n2,则有:n0 = n2 + 1
    论证:
    假设度为 1 的结点个数为 n1,那么二叉树的结点总数 n = n0 + n1 + n2
    二叉树的边数 T = n1 + 2 * n2 = n – 1 = n0 + n1 + n2 – 1
    因此 n0 = n2 + 1

真二叉树(Proper Binar y Tree)

所有结点的度都要么为 0,要么为 2

真二叉树

满二叉树(Full Binar y Tree)

满二叉树

假设满二叉树的高度为 h( h ≥ 1 )
那么第 i 层的结点数量: 2^(i −1)
叶子结点数量: 2^(h −1)
总结点数量 n
n = 2^h - 1 = 2^0 + 2^1 + 2^2 + ⋯ + 2^(h-1)
h = log2(n + 1)

完全二叉树(Complete Binar y Tree)

完全二叉树:对结点从上至下、左至右开始编号,其所有编号都能与相同高度的满二叉树中的编号对应


◼ 叶子结点只会出现最后 2 层,最后 1 层的叶子结点都靠左对齐
◼ 完全二叉树从根结点至倒数第 2 层是一棵满二叉树
◼ 满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树

完全二叉树的性质

◼ 度为 1 的结点只有左子树
◼ 度为 1 的结点要么是 1 个,要么是 0
◼ 同样结点数量的二叉树,完全二叉树的高度最小
假设完全二叉树的高度为h( h ≥ 1 ),那么

一棵有 n 个结点的完全二叉树(n > 0),从上到下、从左到右对结点从 1 开始进行编号,对任意第 i 个结点

面试题

如果一棵完全二叉树有 768 个结点,求叶子结点的个数?
假设叶子结点个数为n0,度为 1 的结点个数为 n1,度为 2 的结点个数为 n2
总结点个数 n = n0 + n1 + n2 ,而且 n0 = n2 + 1
n = 2n0 + n1 – 1

完全二叉树的 n1 要么为 0 ,要么为 1

1. n1为1 时,n = 2n0 , n 必然是偶数
➢ 叶子结点个数 n0 = n / 2 ,非叶子结点个数 n1 + n2 = n / 2

2. n1 为 0 时,n = 2n0 – 1 , n 必然是奇数
➢ 叶子结点个数 n0 = (n + 1) / 2,非叶子结点个数 n1 + n2 = (n – 1) / 2

◼叶子结点个数 n0 = floor( (n + 1) / 2 ) = ceiling( n / 2 )
◼非叶子结点个数 n1 + n2 = floor( n / 2 ) = ceiling( (n – 1) / 2 )
◼因此叶子结点个数为 384

国外教材的说法

上一篇 下一篇

猜你喜欢

热点阅读