#include"Bintree.h"
/*******************************************************/
/* 已知一课棵二叉树的中序和后序,建立这棵树 */
/*******************************************************/
void In_Pos_order(Bintree *t,char *s,char *r)
{
char La[30],Lb[30],Ra[30],Rb[30];
int i,len,length=strlen(r);
if(length>0&&r[length-1]!='/0')
{
*t=(Binnode *)malloc(sizeof(Binnode));
(*t)->data=r[length-1];
for(i=0;s[i]!=r[length-1];i++)
{
Ra[i]=s[i];
La[i]=r[i];
}
len=i;
Ra[len]='/0'; //左中
La[len]='/0'; //左后
for(i=len+1;i<strlen(s);i++)
{
Rb[i-len-1]=s[i];
}
Rb[i-len-1]='/0';
for(i=len;i<strlen(r)-1;i++)
{
Lb[i-len]=r[i];
}
Lb[i-len]='/0';
In_Pos_order(&(*t)->lchild,Ra,La);
In_Pos_order(&(*t)->rchild,Rb,Lb);
}
else
{
*t=NULL;
}
}
int main()
{
Bintree t;
char in[30]="ABCEFGHD",pos[30]="ABFHGEDC";//测试数据
printf("输入中序遍历序列:");
scanf("%s",in);
printf("输入后序遍历序列:");
scanf("%s",in);
In_Pos_order(&t,in,pos);
Preorder2(t);
}
#include"Bintree.h"
/*******************************************************/
/* 判断两棵是否等价 */
/*******************************************************/
int Is_equal( Bintree t1 , Bintree t2 )
{
int t=0;
if(NULL == t1 && NULL == t2)
{
t=1;
}
else
{
if(NULL !=t1 &&NULL != t2 )
{
if(t1->data == t2->data)
{
if(Is_equal(t1->lchild,t2->lchild))
{
t=Is_equal(t1->rchild,t2->rchild);
}
}
}
}
return t;
}
int main()
{
Bintree t1,t2;
Creat_Bintree(&t1);
getchar();
Creat_Bintree(&t2);
if(Is_equal(t1,t2))
{
printf( "Yes!/n") ;
}
else
{
printf( "No!/n" ) ;
}
return 0 ;
}
#include"Bintree.h"
/****************************************************/
/* 查找某个信息是否在这棵树中 */
/****************************************************/
Bintree locale_x(Bintree t,char x)
{
Bintree p;
if(t==NULL) return NULL;
else
{
if( t -> data == x ) return t;
else
{
p = locale_x(t->lchild,x);
if(p)return p;
else
return locale_x(t->rchild,x);
}
}
}
int main()
{
Bintree root,p;
char ch;
Creat_Bintree(&root);
getchar();
printf("输入要查找的值:");
scanf("%c",&ch);
p=locale_x(root,ch);
if(p)printf( "YES!/n" ) ;
else printf( "NO!/n" ) ;
return 0;
}
#include"Bintree.h"
/****************************************************/
/* 树的结点个数 */
/****************************************************/
int num_of_node(Bintree t)
{
if(t==NULL)return 0 ;
else return num_of_node(t->lchild)+num_of_node(t->rchild)+1;
}
int main()
{
Bintree root,p;
Creat_Bintree(&root);
printf("%d/n",num_of_node(root));
return 0;
}
#include"Bintree.h"
/*******************************************************/
/* 已知一课棵二叉树的中序和前序序列,建立这棵树 */
/*******************************************************/
void Pre_In_order(Bintree *t,char *s,char *r)
{
char La[30],Lb[30],Ra[30],Rb[30];
int i,len;
if(s[0]!='/0')
{
*t=(Binnode *)malloc(sizeof(Binnode));
(*t)->data=s[0];
for(i=0;r[i]!=s[0];i++)
{
Ra[i]=r[i];
}
len=i;
Ra[len]='/0'; //左中
for(i=0;i<len;i++)
{
La[i]=s[i+1];
}
La[len]='/0'; //左前
for(i=len+1;i<strlen(r);i++)
{
Rb[i-len-1]=r[i];
}
Rb[i-len-1]='/0';
for(i=len+1;i<strlen(s);i++)
{
Lb[i-len-1]=s[i];
}
Lb[i-len-1]='/0';
Pre_In_order(&(*t)->lchild,La,Ra);
Pre_In_order(&(*t)->rchild,Lb,Rb);
}
else
{
*t=NULL;
}
}
int main()
{
Bintree t;
char pre[30]="ABCDEF",in[30]="CBAEDF";//测试数据
printf("输入前序遍历序列:");
scanf("%s",pre);
printf("输入中序遍历序列:");
scanf("%s",in);
Pre_In_order(&t,pre,in);
Posorder1(t);
}