二叉树存储
特殊二叉树
满二叉树(Full Binary Tree)
除了叶子节点,每一个节点都有两个子节点。(深度为k。节点数量为2^k-1个)。
完全二叉树(Complete Binary Tree)
有n个结点的二叉树,对树中结点按 从上至下、从左到右顺序进行编号, 编号为i(1 ≤ i ≤ n)结点与满二叉树 中编号为 i 结点在二叉树中位置相同。
下面个这个是完全二叉树
下面这个不是完全二叉树
汇总例子
二叉树存储
数组存储
对于完全二叉树,从上至下,从左到右依次存储在数组中。
item | a | b | c | d | e | f | g | h | i | j |
---|---|---|---|---|---|---|---|---|---|---|
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
那么如何通过数组找出树之间的关系呢。
第n个元素的左子节点为 2 * n + 1
第n个元素的右子节点为 2 * n + 2
第n个元素的父节点为 (n-1) / 2
n表示数组的下标。
非完全二叉树其实也可以用以上的方式进行存储,只需要对缺失的节点补空,模拟一个完全二叉树。但是如果非完全二叉树平衡度极低,会浪费大量的存储空间。
item | A | B | NULL | C | NULL | NULL | NULL | D |
---|---|---|---|---|---|---|---|---|
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
可以看到,这种情况下,浪费了一半的空间。
完全二叉树的引入,某种程度上就是为了解决空间浪费问题。
链式存储
作者:iBrake
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.