#include #include typedef struct Btreenode { struct Btreenode *lchild,*rchild; char data; }Bitreenode,*Bitree; //初始化 Bitree Initree() { Bitree p; p=(Bitreenode *)malloc(sizeof(Bitreenode)); p->lchild=p->rchild=NULL; return p; } //创建二叉树 ABD#GJ##K##E##C#FH##IL### ABCD##E###F#GH##I#J#K## void Creat(Bitree *p) //指向指针的指针 { char ch=getchar(); if(ch=='#') (*p)=NULL; else { //Bitree k; *p=(Bitreenode *)malloc(sizeof(Bitreenode)); (*p)->data=ch; Creat(&(*p)->lchild); Creat(&(*p)->rchild); } //return 1; } //先序遍历 void First(Bitree p) { if(p) { printf("%2c",p->data); First(p->lchild); First(p->rchild); } } //中序遍历 void Middle(Bitree p) { if(p) { Middle(p->lchild); printf("%2c",p->data); Middle(p->rchild); } } //后序遍历 void Last(Bitree p) { if(p) { Last(p->lchild); Last(p->rchild); printf("%2c",p->data); } } //求二叉树的深度 //若一棵二叉树为空,则其深度为 0; //否则其深度等于左子树和右子树的最大深度加 1 int DeepBitree(Bitree p) { int deep1,deep2; if(p==NULL)return(0); else { deep1=DeepBitree(p->lchild); deep2=DeepBitree(p->rchild); if(deep1>deep2)return(deep1+1); else return(deep2+1); } } //在二叉树中查找值为 x 的结点 void search(Bitree *q,char x,Bitree *p) { if((*q)->data==x) *p=*q; else { if((*q)->lchild) search(&(*q)->lchild,x,&(*p)); if((*q)->rchild) search(&(*q)->rchild,x,&(*p)); } //return NULL; } //求叶子结点数目 int k=0; void leaf(Bitree p) { if(p) { leaf(p->lchild); if(!p->lchild && !p->rchild) k++; leaf(p->rchild); } //return k; } //删除左子树 void Search_lchild(Bitree *p,char parents,Bitree *k) { if ((*p)->data==parents) { if((*p)->lchild) { *k= (*p)->lchild ; //查找左子树 //Deletel(*k); } } else { if((*p)->lchild) Search_lchild(&(*p)->lchild,parents,&(*k)); if((*p)->rchild) Search_lchild(&(*p)->rchild,parents,&(*k)); } } void Deletel(Bitree *p) { Bit...