二叉树
来源:互联网 发布:flashfxp mac 破解版 编辑:程序博客网 时间:2024/04/19 22:52
二叉树的定义是一种递归定义。满二叉树与完全二叉树的定义与区别。
typedef struct btreenod
{
elemtype data;
struct btreenode *LC;
struct btreenode *RC;
} bnode;
bnode *BT;
1、二叉树的先序遍历算法
void preorder(bnode *BT)
{
if(BT==NULL)
return;
else
{
visit(BT);
if(BT->LC!=NULL) preorder(BT->LC);
if(BT->RC!=NULL) preorder(BT->RC);
}
}
2、二叉树的中序遍历算法
void inorder(bnode *BT)
{
if(BT==NULL)
return;
else
{
if(BT->LC!=NULL) inorder(BT->LC);
visit(BT);
if(BT->RC!=NULL) inorder(BT->RC);
}
}
3、二叉树的后序遍历算法
void postorder(bnode *BT)
{ if(BT==NULL)
return;
else
{
if(BT->LC!=NULL) postorder(BT->LC);
if(BT->RC!=NULL) postorder(BT->RC);
visit(BT);
}
}
由二叉树可以获得三种遍历序列。
由两种遍历序列可以重构二叉树。
×××生成二叉树的算法×××
void Creat_Binary_Sort_tree(bnode ** proot)
{
bnode *p,*q;
elemtype kl
int i,n;
*proot=NULL;
printf("intput n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
p=(bnode *)malloc(sizeof(bnode));
p->LC=NULL;
p->RC=NULL;
printf("input k:");
scanf("%d",&k);
if(*proot=NULL)
*proot=p;
else
{
q=*proot;
while(q!=NULL)
{
if(q->data>k)
if(q->LC!=NULL)
q=q->LC;
else
{
q->LC=p;
q=NULL;
}
if(q->data<k)
if(q->RC!=NULL)
q=q->RC;
else
{
q->RC=p;
q=NULL;
}
}
}
}
}