二叉树的顺序存储
实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素
typedef TElemType SqBiTree[MAXSIZE];
SqBiTree bt;
若不是满二叉树,则在空的位置存0;
例:
缺点:
最坏情况:深度为k的且只有k个结点的单只树需要长度为2^k-1的一维数组。浪费空间。
特点:结点间关系蕴含在其存储位置中。适合满二叉树存储。
二叉树的链式存储结构
二叉链表:
typedef struct BiNode{
TElemType data;//数据域
struct BiNode *lchild,*rchild;//一个左子树,一个右子树
}BiNode,*BiTree;//前者为结点类型,后者为指向这种结点的指针
若一个二叉链表有n个结点,则其有n+1个空指针域
三叉链表:
在二叉链表的基础上,加一个parent指针,指向结点的双亲。
typedef struct TriTNode{
TElemType data;
struct TriTNode *parent,*lchild,*rchild;
}TriTNode,*TriTree;