/*
Copyright (c)2016,烟台大学计算机与控制工程学院
All rights reserved.
文件名称:项目1-2.cbp
作 者:程德泉
完成日期:2016年11月10日
版 本 号:v1.0
问题描述:实现二叉树的二叉树构造算法的验证,并测试数据。
输入描述:无
程序输出:测试数据
*/
代码:
- #include "btree.h"
-
- BTNode *CreateBT1(char *pre,char *in,int n)
-
-
- {
- BTNode *s;
- char *p;
- int k;
- if (n<=0) return NULL;
- s=(BTNode *)malloc(sizeof(BTNode));
- s->data=*pre;
- for (p=in; p<in+n; p++)
- if (*p==*pre)
- break;
- k=p-in;
- s->lchild=CreateBT1(pre+1,in,k);
- s->rchild=CreateBT1(pre+k+1,p+1,n-k-1);
- return s;
- }
-
- int main()
- {
- ElemType pre[]="ABDGCEF",in[]="DGBAECF";
- BTNode *b1;
- b1=CreateBT1(pre,in,7);
- printf("b1:");
- DispBTNode(b1);
- printf("\n");
- return 0;
- }
运行结果:
2.
由后序序列和中序序列构造二叉树
代码:
- #include "btree.h"
-
- BTNode *CreateBT2(char *post,char *in,int n)
-
-
- {
- BTNode *s;
- char r,*p;
- int k;
- if (n<=0) return NULL;
- r=*(post+n-1);
- s=(BTNode *)malloc(sizeof(BTNode));
- s->data=r;
- for (p=in; p<in+n; p++)
- if (*p==r)
- break;
- k=p-in;
- s->lchild=CreateBT2(post,in,k);
- s->rchild=CreateBT2(post+k,p+1,n-k-1);
- return s;
- }
-
- int main()
- {
- ElemType in[]="DGBAECF",post[]="GDBEFCA";
- BTNode *b2;
- b2=CreateBT2(post,in,7);
- printf("b2:");
- DispBTNode(b2);
- printf("\n");
- return 0;
- }
运行结果:
3.由先序序列和中序序列构造二叉树
代码:
- #include "btree.h"
-
- #define N 30
- typedef ElemType SqBTree[N];
- BTNode *trans(SqBTree a,int i)
- {
- BTNode *b;
- if (i>N)
- return(NULL);
- if (a[i]=='#')
- return(NULL);
- b=(BTNode *)malloc(sizeof(BTNode));
- b->data=a[i];
- b->lchild=trans(a,2*i);
- b->rchild=trans(a,2*i+1);
- return(b);
- }
- int main()
- {
- BTNode *b;
- ElemType s[]="0ABCD#EF#G####################";
- b=trans(s,1);
- printf("b:");
- DispBTNode(b);
- printf("\n");
- return 0;
- }
运行结果:
知识点总结:
二叉树算法库的应用。
学习心得:
这3种方法结合具体情况使用。