#include#include#include
#define MaxSize 100typedefcharElemType;
typedefstructnode
{
ElemType data;//数据类型
struct node *lchild;//指向左孩子
struct node *rchild;//指向右孩子
}BTNode;void CreateBTNode(BTNode *&b,char *str)//由str串创建二叉链
{
BTNode*St[MaxSize],*p=NULL;int top=-1,k,j=0;charch;
b=NULL;//建立二叉链初始时为空
ch=str[j];while(ch!='\0')//str未扫描完时循环
{switch(ch)
{case'(':top++;St[top]=p;k=1;break;//为左结点
case')':top--;break;case',':k=2;break;//为右结点
default:p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;
p->lchild=p->rchild=NULL;if(b==NULL)//p指向二叉树的根结点
b=p;else//已建立二叉树根结点
{switch(k)
{case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;
}
}
}
j++;
ch=str[j];
}
}
BTNode*FindNode(BTNode *b,ElemType x)//返回data域为x的结点指针
{
BTNode*p;if(b==NULL)returnNULL;else if(b->data==x)returnb;else{
p=FindNode(b->lchild,x);if(p!=NULL)returnp;else
return FindNode(b->rchild,x);
}
}
BTNode*LchildNode(BTNode *p)//返回*p结点的左孩子结点指针
{return p->lchild;
}
BTNode*RchildNode(BTNode *p)//返回*p结点的右孩子结点指针
{return p->rchild;
}int BTNodeDepth(BTNode *b)//求二叉树b的深度
{intlchilddep,rchilddep;if(b==NULL)return (0);//空树的深度为0
else{
lchilddep=BTNodeDepth(b->lchild);