/*二叉树的应用*/
#define NULL 0
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild; /*左右孩子指针*/
}BiTNode,*BiTree;
int Initiate (BiTree *bt)
/*初始化建立二叉树*bt的头结点*/
{ if((*bt=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)
return 0;
(*bt)->lchild=NULL;
(*bt)->rchild=NULL;
return 1;
}
BiTree Create(char x,BiTree lbt,BiTree rbt)
/*生成一棵以x为根结点的数据域值以lbt和rbt为左右子树的二叉树*/
{ BiTree p;
if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)
return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
return p;
}
BiTree InsertL(BiTree bt,char x,BiTree parent)
/*在二叉树bt的结点parent的左子树插入结点数据元素x*/
{ BiTree p;
if (parent==NULL) {
printf("/n插入出错");
return NULL; }
if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL; p->rchild=NULL;
if (parent->lchild==NULL) parent->lchild=p;
else { p->lchild=parent->lchild;
parent->lchild=p; }
return bt;
}
BiTree InsertR(BiTree bt,char x,BiTree parent)
/*在二叉树bt的结点parent的左子树插入结点数据元素x*/
{ BiTree p;
if (parent==NULL) {
printf("/n插入出错");
return NULL; }
if ((p=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)
return NULL;
p->data=x;
p->lchild=NULL; p->rchild=NULL;
if (parent->rchild==NULL) parent->rchild=p;
else { p->rchild=parent->rchild;
parent->rchild=p; }
return bt;
}
BiTree DeleteL(BiTree bt,BiTree parent)
/*在二叉树bt中删除结点parent的左子树*/
{ BiTree p;
if (parent==NULL||parent->lchild==NULL) {
printf("/n删除出错");
return NULL; }
p=parent->lchild;
parent->lchild=NULL;
free(p); /*当p为非叶子结点时,这样删除仅释放了所删子树根结点的空间,若要删除子树分支中的结点,需用后面介绍的遍历操作来实现。*/
return bt;
}
void PreOrder(BiTree bt) /*先序遍历二叉树bt*/
{ if (bt==NULL) return; /*递归调用的结束条件*/
printf("%c ",bt->data); /*访问结点的数据域*/
PreOrder(bt->lchild); /*先序递归遍历bt的左子树*/
PreOrder(bt->rchild);
/*先序递归遍历bt的右子树*/
}
void InOrder(BiTree bt) /*先序遍历二叉树bt*/
{ if (bt==NULL) return; /*递归调用的结束条件*/
InOrder(bt->lchild); /*先序递归遍历bt的左子树*/
printf("%c ",bt->data); /*访问结点的数据域*/
InOrder(bt->rchild);
/*先序递归遍历bt的右子树*/
}
BiTree Search(BiTree bt,char x)
{BiTree p;
if(bt){
if(bt->data==x)
return bt;
if(bt->lchild!=NULL)
return(Search(bt->lchild,x));
if(bt->rchild!=NULL)
return(Search(bt->rchild,x));
}
}
main()
{
BiTree t,p;
clrscr();
Initiate(&t);
p=Create('F',NULL,NULL);
p=Create('E',NULL,p);
t=Create('D',NULL,NULL);
p=Create('B',t,p);
t=Create('G',NULL,NULL);
t=Create('C',NULL,t);
p=Create('A',p,t);
p=InsertL(p,'H',p->rchild);
p=InsertR(p,'M',p->rchild);
/*printf("%c/n",p->data);
printf("%c/n",p->lchild->data);
printf("%c/n",p->rchild->data);
printf("%c/n",p->rchild->lchild->data);
printf("%c/n",p->rchild->rchild->data);*/
PreOrder(p); printf("/n");
InOrder(p); printf("/n");
t=Search(p,'D');
if(t)
printf("found/n");
else
printf("no/n");
}
二叉树
最新推荐文章于 2022-02-20 22:47:07 发布