定义一个长度为MaxSize的数组t,按照从上至下、从左至右的顺序依次存储完全二叉树中的各个结点。
TreeNode t[MaxSize];
#define MaxSize 100
struct TreeNode {ElemType value; //结点中的数据元素bool isEmpty; //结点是否为空
};for (int i=0; i<MaxSize; i++){ //初始化时所有节点标记为空t[i].isEmpty=true;
}
tips:可以让第一个位置空缺,保证数组下标和结点编号一致
几个重要常考的基本操作:
1. i的左孩子—2i
2. i的右孩子—2i+1
3. i的父节点—[i/2]
4. i所在的层次——[log2(n + 1)]或[log2n]+ 1
1.若完全二叉树中共有n个结点,则
判断i是否有左孩子? 2i<=n
判断i是否有右孩子? 2i+1<=n
判断i是否是叶子/分支结点? i > [n/2] ?
2.如果不是完全二叉树,依然按层序将各节点顺序存储
二叉树的顺序存储中,一定要把二叉树的结点编号与完全二叉树对应起来
缺点:会有大量的空间闲置
结论:二叉树的顺序存储结构,只适合存储完全二叉树