二叉树的存储表示与实现

二叉树的顺序存储

完全二叉树的存储可以按照从上到下,从左到右的顺序依次存储在一维数组中。完全二叉树的顺序存储如图所示:

               


如果按照从上到下,从左到右的顺序把非完全二叉树也同样的编号,将结点依次存放在一维数组中,为了能够正确反映二叉树中结点之间的逻辑关系,需要在一维数组中将二叉树中不存在的结点位置空出。

 


顺序存储对于完全二叉树来说是比较适合的,因为采用顺序存储能够节省内存单元,并能够利用公式得到每个结点的存储位置。但是,对于非完全二叉树来说,这种存储方式会浪费内存空间。




二叉树的链式存储

在二叉树中,每一个结点有一个双亲结点和两个孩子结点。从一棵二叉树的根结点开始,通过结点的左右孩子地址就可以找到二叉树的每一个结点。因此二叉树的链式存储结构包括三个域:数据域,左孩子指针域和右孩子指针域。其中,数据域存放结点的值,左孩子指针域指向左孩子结点,右孩子指针域指向右孩子结点。这种链式存储结构称为二叉树链表存储结构



如果二叉树采用二叉链表存储结构表示


有时为了方便找到结点的双亲结点,在二叉链表的存储结构中增加以指向双亲结点的指针域parent,这种存储结构称为三叉链表结点存储结构。


通常情况下,二叉树采用二叉链表进行表示。二叉链表存储结构的类型定义如下:

typedef struct Node
{
	DataType data;
	struct Node *lchild;
	struct Node *rchild;
}*Bitree,BitNode;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章