图片来源于菜鸟教程,还有讲解:链接
1 基础知识
1)树的新理解方法:
(非空树)一棵树有一个根,其余结点又可以划分为不同的集合,每一个集合又是一棵树,并且称为根的子树。
在完全二叉树中,由于每个结点最多有两个孩子结点,因此完整的最小的一棵子树是由三个结点构成。也就是说,根与两个孩子构成一棵树,而其两个孩子作为根也可以构成一棵树,整颗大树是由一棵棵小树构成。
详细定义见<大话数据结构>P151
2)树中根与孩子结点间序号关系:
- 总根index=1:
在有的教材中对树的标记从index=1开始,可能是有的数组index=0的元素存储的是长度?此时根与孩子结点的序号关系:
root:index
left_child: left
right_child:right
//由根到左右孩子:
left = index * 2
right = index * 2 + 1
//由左右孩子到根:
index = left/2 = right/2 (整除)
- 总根 index=0:
终于找到一张从index=0标记的图,这个与实际存储相同。此时根与孩子结点的序号关系:
root:index
left_child: left
right_child:right
//由根到左右孩子:
left = index * 2 + 1
right = index * 2 + 2
//由左右孩子到根:
index = (left-1)/2 = (right-1)/2(整除)
3)堆以及大顶堆、小顶堆:
- 堆是一个完全二叉树,其中的元素按照层序遍历的方式排列。
- 大顶堆:堆中每个结点的值都大于等于其左右孩子结点的值,称为大顶堆。
- 小顶堆:堆中每个结点的值都小于等于其左右孩子结点的值,称为大顶堆。
<大话数据结构>P397
4)理解 i<size