二叉树的存储
一、顺序存储结构
二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下,自左至右存储完全二叉树上的节点元素,老师的代码中使用的是前面使用过的循环列表对二叉树进行存储。
对于一般的二叉树(如代码中构建的二叉树),为了让数组下标能反映二叉树中结点之间的逻辑关系,只能添加一些并不存在的空节点,让其每个节点与完全二叉树上的结点相对照,再存储到一维数组的对应分量中。昨天的二叉树如下图:
用一个向量来存储:
[a, b, c, 0, d, e, 0, 0, 0, f, g]
优点:仅需要一个向量,简单粗暴
缺点:对于实际的二叉树,很多子树为空,导致大量的0值。
在最坏的情况下,一个高度为h且只有h个节点的单支树却需要占据近 2 h − 1 {2^h -1} 2h−1个存储空间。
使用顺序存储结构存储二叉树还需注意父节点与子节点在同一向量中,对应序号的数学关系:
n L e f t C h i l d = 2 ∗ n R o o t + 1 {n_{LeftChild} = 2 * n_{Root} + 1} nLeftChild=2∗nRoot+1
n R i g h t C h i l d = 2 ∗ n R o o t + 2 {n_{RightChild} = 2 * n_{Root} + 2} nRightChild=2∗nRoot+