对于完全二叉树,我们可以使用顺序存储来方便的实现。因为对于下标为i的节点,它的左儿子在下标为2i处,右儿子在下标为2i+1处。(二叉树的元素从下标为1的地方开始存放)。当然,不能超过二叉树的节点总个数N。但是顺序存储的缺点也很明显,不利于插入和删除。这个缺点总是无法避免的。
实际上,我们经常使用的是链式存储二叉树。下面给出链式存储二叉树的ADT。
typedef struct BTreeNode *BinTree;
typedef BinTree Position;
typedef int ElementType;
struct BTreeNode
{
ElementType data; //数据域
BinTree left; //左子树
BinTree right; //右子树
}