树(Tree)的基本概念

节点的度(degree):子树的个数
树的度:所有节点度中的最大值(图中的1有5个度 所以该树的度为5)
在这里插入图片描述

  • 节点的深度(depth):从根节点到当前节点的唯一路径上的节点总数
  • 节点的高度(height):从当前节点到最远叶子节点的路径上的节点总数
  • 树的深度:所有节点深度中的最大值 (图中的221、222、223)
  • 树的高度:所有节点高度中的最大值 (图中的1)

二叉树

  • 每个节点的度最大为 2(最多拥有2颗子树)
  • 左子树和右子树是有顺序的
    在这里插入图片描述

真二叉树(Full Binary Tree:完满二叉树):所有节点的度都要么为 0,要么为 2

满二叉树

国外叫 Perfect Binary Tree:完美二叉树
性质:最后一层节点的度都为 0,其他节点的度都为 2
i i i 层的节点数量: 2 i − 1 2^i-1 2i1
总节点数量 n = 2 h − 1 = 2 0 + 2 1 + 2 2 + ⋯ + 2 h − 1 n = 2^h − 1 = 2^0 + 2^1 + 2^2 + ⋯ + 2^{h−1} n=2h1=20+21+22++2h1
∴ h = l o g 2 ( n + 1 ) \therefore h = log 2(n + 1) h=log2(n+1)

完全二叉树

对节点从上至下、左至右开始编号,其所有编号都能与相同高度的满二叉树中的编号对应
满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树,可能不满
完全二叉树的性质:
度为 1 的节点只有左子树
度为 1 的节点要么是 1 个,要么是 0 个

  • 至少有 2 h − 1 2^{h − 1} 2h1 个节点 ( 2 0 + 2 1 + 2 2 + ⋯ + 2 h − 2 + 1 2^0 + 2^1 + 2^2 + ⋯ + 2^{h−2}+1 20+21+22++2h2+1
  • 最多有 2 h − 1 2^h − 1 2h1 个节点( 2 0 + 2 1 + 2 2 + ⋯ + 2 h − 1 2^0 + 2^1 + 2^2 + ⋯ + 2^{h−1} 20+21+22++2h1,满二叉树 )
    在这里插入图片描述
    图中完全二叉树高度为4
    至少有 2 3 = 8 2^3=8 23=8个节点 最多有 2 4 − 1 = 15 2^4-1=15 241=15个节点

已知节点个数求完全二叉树高度
∵ 2 h − 1 ≤ n ≤ 2 h − 1 ∴ 2 h − 1 ≤ n < 2 h ∴ h − 1 ≤ l o g 2 n < h f o r e x a m p l e         h − 1 ≤ 8.5 < h h = 9 h = f l o o r ( l o g 2 n ) + 1 o r      h = c e i l l i n g ( l o g 2 n )             \because 2^{h − 1}≤ n ≤ 2^h − 1 \\ \therefore 2^{h − 1}≤ n < 2^h \\ \therefore h-1 ≤ log_2n < h \\ forexample ~~~~~~~h-1 ≤8.5 <h \\ h =9 \\ h=floor(log_2n)+1 \\ or ~~~~h=ceilling(log_2n)~~~~~~~~~~~ 2h1n2h12h1n<2hh1log2n<hforexample       h18.5<hh=9h=floor(log2n)+1or    h=ceilling(log2n)           
floor 是向下取整,另外,ceiling 是向上取整

一棵有 n 个节点的完全二叉树(n > 0),从上到下、从左到右对节点从 0 开始进行编号,对任意第 i 个节点
如果 i = 0 i = 0 i=0 ,它是根节点
如果 i > 0 i > 0 i>0 ,它的父节点编号为 f l o o r i – 1 2 floor \frac{i – 1}{2} floor2i1
如果 2 i + 1 ≤ n – 1 2i + 1 ≤ n – 1 2i+1n1 ,它的左子节点编号为 2 i + 1 2i + 1 2i+1
如果 2 i + 1 > n – 1 2i + 1 > n – 1 2i+1>n1 ,它无左子节点
如果 2 i + 2 ≤ n – 1 2i + 2 ≤ n – 1 2i+2n1 ,它的右子节点编号为 2 i + 2 2i + 2 2i+2
如果 2 i + 2 > n – 1 2i + 2 > n – 1 2i+2>n1 ,它无右子节点
在这里插入图片描述
这里我们以4、9为出发点看
该满二叉树有10个节点 所以它最后一个索引为9 即 n − 1 n-1 n1
2 × 4 + 1 = 9    ≤ 9 2 \times 4+1 = 9 ~~≤9 2×4+1=9  9 所以索引为4的节点有左子树
2 × 5 + 1 = 11 ≥ 9 2 \times 5+1 = 11 ≥9 2×5+1=119 所以索引为5的节点没有左子树

如果一棵完全二叉树有 768 个节点,求叶子节点的个数
n = 2 n 0 + n 1 – 1 n = 2n_0 + n_1 – 1 n=2n0+n11
完全二叉树的 n 1 n_1 n1 要么为 0,要么为 1

n 1 n_1 n1为1时, n = 2 n 0 n =2n_0 n=2n0,n 必然是偶数
叶子节点个数 n 0 = n 2 n_0 = \frac{n}{2} n0=2n,非叶子节点个数 n 1 + n 2 = n 2 n_1 + n_2 = \frac{n}{2} n1+n2=2n

n 1 n_1 n1为0时, n = 2 n 0 – 1 n = 2n_0 – 1 n=2n01 n n n 必然是奇数
叶子节点个数 n 0 = n + 1 2 n_0 = \frac{n+1}{2} n0=2n+1,非叶子节点个数 n 1 + n 2 = n − 1 2 n_1 + n_2 = \frac{n-1}{2} n1+n2=2n1

所以叶子节点个数 n 0 = f l o o r ( n + 1 2 ) = c e i l i n g ( n 2 ) n_0 = floor(\frac{n+1}{2}) = ceiling(\frac{n}{2} ) n0=floor(2n+1)=ceiling(2n)
非叶子节点个数 n 1 + n 2 = f l o o r ( n 2 ) = c e i l i n g ( n − 1 2 ) n1 + n2 = floor(\frac{n}{2}) = ceiling( \frac{n-1}{2} ) n1+n2=floor(2n)=ceiling(2n1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值