#include<iostream>
using namespace std;
#define max 100
typedef char elemtype;
typedef struct node
{
elemtype data;
struct node*lchild;
struct node*rchild;
}BTnode;
void create(BTnode*&b,char *str)//创建二叉树
{
BTnode *st[max],*p;
int top=-1,k,j=0;
char ch;
b=NULL;
ch=str[j];
while(ch!='\0')
{
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)
b=p;
else
{
switch(k)
{
case 1:st[top]->lchild=p;
break;
case 2:st[top]->rchild=p;
break;
}
}
}
j++;
ch=str[j];
}
}
void destroy(BTnode*&b)//销毁二叉树
{
if(b!=NULL)
{
destroy(b->lchild);
destroy(b->rchild);
free(b);
}
}
int BTheight(BTnode*b)//求高度
{
int lchild,rchild;
if(b==NULL)
return (0);
else
{
lchild=BTheight(b->lchild);
rchild=BTheight(b->rchild);
return (lchild>rchild)?(lchild+1):(rchild+1);
}
}
BTnode*find(BTnode*b,elemtype x)//查找结点
{
BTnode *p;
if(b==NULL)
return NULL;
else if(b->data==x)
return b;
else
{
p=find(b->lchild,x);
if(p!=NULL)
return p;
else
return find(b->rchild,x);
}
}
//找孩子结点
BTnode*LchildNode(BTnode*b)
{
return b->lchild;
}
BTnode*RchildNode(BTnode*b)
{
return b->rchild;
}
void display(BTnode*b)//输出二叉树
{
if(b!=NULL)
{
cout<<b->data;
if(b->lchild!=NULL||b->rchild!=NULL)
{
cout<<"(";
display(b->lchild);
if(b->rchild!=NULL)
cout<<",";
display(b->rchild);
cout<<")";
}
}
}
int main()
{
BTnode*b,*p,*lp,*rp;
create(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
cout<<"二叉树B为:";
display(b);
cout<<endl;
cout<<"'H'结点的";
p=find(b,'H');
if(p!=NULL)
{
lp=LchildNode(p);
if(lp!=NULL)
{
cout<<"左孩子为:"<<lp->data;
}
else
cout<<"无左孩子";
rp=RchildNode(p);
if(rp!=NULL)
cout<<"右孩子为:"<<rp->data;
else
cout<<"无右孩子";
}
cout<<endl;
cout<<"二叉树的高度为:";
cout<<BTheight(b)<<endl;
destroy(b);
return 0;
}
数据结构---二叉树的基本运算
最新推荐文章于 2022-05-11 19:21:14 发布