顺序存储结构 该方法是把二叉树的所有结点按照一定的线性次序存储到一片连续的存储单元中结点在这个序列中的相互位置还能反映出结点 之间的逻辑关系 完全二叉树结点编号 () 编号办法 在一棵n个结点的完全二叉树中从树根起自上层到下层每层从左至右给所有结点编号能得到一个反映整个二叉树结构的 线性序列 【例】如下图所示 () 编号特点 完全二叉树中除最下面一层外各层都充满了结点每一层的结点个数恰好是上一层结点个数的倍从一个结点的编号就可推得 其双亲左右孩子兄弟等结点的编号假设编号为i的结点是k i (≤i≤n)则有 ①若i>则k i 的双亲编号为 ;若i=则K i 是根结点无双亲 ②若i≤n则K i 的左孩子的编号是i;否则K i 无左孩子即K i 必定是叶子因此完全二叉树中编号 的结 点必定是叶结点 ③若i+≤n则K i 的右孩子的编号是i+;否则K i 无右孩子 ④若i为奇数且不为则K i 的左兄弟的编号是i;否则K i 无左兄弟 ⑤若i为偶数且小于n则K i 的右兄弟的编号是i+;否则K i 无右兄弟 完全二叉树的顺序存储 将完全二叉树中所有结点按编号顺序依次存储在一个向量bt[n]中 其中 bt[n]用来存储结点 bt[]不用或用来存储结点数目 【例】表是图所示的完全二叉树的顺序存储结构bt[]为结点数目b[]的双亲左右孩子分别是bt[]bt[l]和 bt[] 一般二叉树的顺序存储 () 具体方法 ① 将一般二叉树添上一些 虚结点成为完全二叉树 ② 为了用结点在向量中的相对位置来表示结点之间的逻辑关系按完全二叉树形式给结点编号 ③ 将结点按编号存入向量对应分量其中虚结点用∮表示 () 优点和缺点 ① 对完全二叉树而言顺序存储结构既简单又节省存储空间 ② 一般的二叉树采用顺序存储结构时虽然简单但易造成存储空间的浪费 【例】最坏的情况下一个深度为k且只有k个结点的右单支树需要k个结点的存储空间 ③在对顺序存储的二叉树做插入和删除结点操作时要大量移动结点 二叉树的顺序存储结构类型定义 【参见参考书】 |