提示:本篇章主要讲解数据结构中树的相关知识。
二叉树的存储结构----链式存储结构
- 在二叉树链式存储结构中最常用的是二叉链表。二叉链表的每个结点有一个数据域和两个指针域,一个指针指向左孩子,另一个指向右孩子。结点结构描述为:
二叉链表
非完全二叉树的二叉链表存储结构
建立二叉树的二叉链表
-产生问题:因为在顺序存储结构中是以结点在数组中的相对位置表示结点之间的关系,因此,一般的二叉树也必须以满二叉树的形式来存储 这样就会造成存储空间的浪费。
非完全二叉树的顺序存储结构
建立二叉树的二叉链表
struct node * p[10];
struct node * Creat_tree( )
{ scanf(“%d%c”,&I,&ch);
while(i!=0&&ch!=#)
{
s=(struct node *)malloc(sizeof(struct node));
S->data=ch; s->lchild=s->rchild=NULL;
p[i]=s;
if(i==1) t=s;
else{
j=i/2; if(i%2==0) p[j]->lchild=s;
else p[j]->rchild=s;
}
scanf(“%d,%c”,&i,&ch);
}
return t;
}
三叉链表(了解即可,目前我暂时都没有用到过)
在实际操作中,如经常需要寻找结点的双亲,便可以采用三叉链表的形式。三叉链表的结点比二叉链表结点多一个指向双亲的指针域。