数据结构 树结构简单总结

定义: 

树(Tree): 是由n(>=0)个节点组成的有限集合

n = 0 时,为空树

树的根Root用r表示,其余的节点可以分为m(m>=0)个不相交的有限子集T1,T2...Tm,每个子集本身又是一棵树

术语:

1. 节点的度(degree): 某节点的子节点的个数

2. 树的度: 树中最大节点的度 

3. 父节点(Parent) 子节点(Child) 兄弟节点(Sibling): 注意,兄弟节点之间要有共同的父节点

4. 叶节点: 度为0的节点

5. 路径: 从节点n1到节点nk所经过的节点 n1 n2 n3 ... nk组成的序列

6.路径长度: 路径包含边的数量

7. 树的层次Level: 定义根节点为1层,其他任意节点都是父节点+1层

8. 树的深度Depth:树中最大的层数

二叉树(重要)

二叉树的定义: (递归定义)

(1) 二叉树可以为空树

(2) 若不为空,其由根节点和其两个不相交的二叉树,左子树TL和右子树TR组成

也就是说,不为空的情况下,每个节点最大的度为2

二叉树的性质

1. 二叉树第k层(k>0)最多包含 2^{_{k-1}}个节点

\left \lceil log2 ^{^{(n+1)}}\right \rceil2. 二叉树前k层(k>0)最多包含2^{_{k}}-1个节点 (满二叉树的情况)

3. 任意二叉树 度为0的节点 n0 和度为2度的节点 n2之间的关系是 n0 = n2 + 1

4. 节点数为n的二叉树,其高度最小为 \left \lfloor \log2^n \right \rfloor + 1 或  \left \lceil log2^{(n+1))} \right \rceil (完全二叉树的情况)

5. 节点数为n的二叉树,其高度最大为 n 即链表的情况

说明 性质3: 任意二叉树 度为0的节点 n0 和度为2度的节点 n2之间的关系是 n0 = n2 + 1

二叉树中存在度为 0 1 2 的节点 n0 n1 n2 总节点n = n0+n1+n2

二叉树每个节点上方链接线的数量为0*n0+1*n1+2*n2 + 1 (加上的是根节点上方没有链接线)

每个节点上方链接线的数量也等于n 可建立等式: n = n0+n1+n2 = n1+2*n2+1

有: n0 = n2 + 1

说明 性质4:

n个节点的二叉树,当为一个完全二叉树时,高度最小,满足不等式:

 2^{_{k-1}} <= n <= 2^{_{k}}-1

看左边 有  k-1 <= log2^{n} k<=   log2^{n} + 1 

由于k是整数,有 k<=  \left \lfloor \log2^n \right \rfloor + 1

看右边 log2^{(n+1))}<=k k是整数 有:   \left \lceil log2^{(n+1))} \right \rceil <= k

最后得出 k =  \left \lfloor \log2^n \right \rfloor + 1  =  \left \lceil log2^{(n+1))} \right \rceil

满二叉树 & 完全二叉树

满二叉树,除了叶子结点,所有的节点的度都是2

完全二叉树,除了最后一层,每一层都达到最大节点数量,并且最后一层的叶子结点,必须从左到右连续存在,最多只能存在一个度为1的节点 (n1 = 1|0)

满二叉树一定是完全二叉树

完全二叉树不一定是满二叉树

性质:
1. 对于n节点的完全二叉树 / 满二叉树 其高度k为  \left \lfloor \log2^n \right \rfloor + 1 或  \left \lceil log2^{(n+1))} \right \rceil 

2. k层满二叉树有 2^{_{k}}-1 个节点

3. k层完全二叉树的节点数量n的范围是 2^{_{k-1}} <=n <= 2^{_{k}}-1

4. n1 = 0 或 n1 = 1

5. n2 和 n0的关系满足

         n为偶数时,n2=n/2  此时n1 = 1

        n为奇树是 n2 = \frac{n+1}{2} 此时n1 = 0

6. 若根节点编号为1 依次编号 则某节点i的左孩子为 2i 右孩子为2i+1 ,若2i>n 无左孩子 若2i+1>n则无右孩子。任意节点i的父节点为 \left \lfloor \frac{i}{2} \right \rfloor

二叉树的存储

完全二叉树 / 满二叉树可以使用数组表示 其中1为root的位置,以此类推

对于一般二叉树,使用数组会造成资源浪费,可以使用链表,如下方法

任何树,都可以通过孩子兄弟表示法转换成二叉树,如图所示:

孩子兄弟表示法也是React Fiber树的表示方法

 

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值