1.二叉树的顺序存储,
即用一维数组按照从左到右,从上到下的顺序依次存储,分析计算可得每个节点的编号,类似于树状数组。
适用于完全二叉树。
存储非完全二叉树时,需要在一维数组中将二叉树不存在的结点位置空出,并用NULL填充。
2.二叉树.的链式存储
二叉树的链式存储结构
二叉链表存储结构包含三个域:数据域,左孩子指针(指向左孩子节点)和右孩子指针(指向右孩子节点)。
三叉lian链表存储结构在二叉链表存储结构的基础上再增加一个指向双亲结点的指针域parent。
typedef struct Node//二叉链表的存储结构类型定义
{
DataType data;
struct Node *lchild;
struct Node *rchild;
}*BiTree,BitNode;
er二叉树的基本运算
(1)二叉树的初始化操作。jian将指向二叉树的根节点指针置空。
void InitBitTree(Bitree *T)//二叉树的初始化操作
{
*T=NULL;
}
(2)二叉树的销毁操作。
void DestroyBitTree(BitTree *T)//销毁二叉树操作
{
if(*T)
{
if(*T->lchild)
DestoryBitTree(&((*T)->lchild));
if((*T)->rchild)
DestoryBitTree(&((*T)->rchild));
free(*T);
*T=NULL;
}
}
(3)创建二叉树操作。根据er'c二叉树的递归定义,先生成二叉树的根节点,将元素值fu'z赋值给节点上的数据域,然后递归chua创建左子树和右子树。其中#表示空。
void CreateBitTree(BiTree *T)
{
DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BitNode));
if(!(*T))//如果是空的二叉树
exit(-1);
(*T)->data =ch;
CreateBitTree(&((*T)->lchild));//生成左子树
CreateBitTree(&((*T)->rchild));//生成右子树
}
}