数据结构---二叉树的基本运算

来源:互联网 发布:windows优化软件知乎 编辑:程序博客网 时间:2024/05/18 17:56
#include<iostream>using namespace std;#define max 100typedef 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;elsereturn 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;}elsecout<<"无左孩子";rp=RchildNode(p);if(rp!=NULL)cout<<"右孩子为:"<<rp->data;elsecout<<"无右孩子";}cout<<endl;cout<<"二叉树的高度为:";cout<<BTheight(b)<<endl;destroy(b);return 0;}

原创粉丝点击