二叉树的基本操作

来源:互联网 发布:ahc官网扫码软件 编辑:程序博客网 时间:2024/06/11 12:46
#include<iostream>using namespace std;typedef struct btnode{char element;btnode *lchild;btnode *rchild;btnode(){lchild=rchild=NULL;}btnode(char& x){element=x;lchild=rchild=NULL;}btnode(char& x,btnode *l,btnode *r){    element=x;    lchild=l;    rchild=r;}}btnode;btnode* MakeTree(char x,btnode *l,btnode *r){    if(!x) return NULL;    btnode *q=new btnode(x,l,r);    l=NULL;    r=NULL;    return q;}void Clear(btnode *t){    if(t)    {        Clear(t->lchild);        Clear(t->rchild);        cout<<"***now clear "<<t->element<<endl;        delete t;    }}void Visit(char& x){    cout<<x<<" ";}void PreOrder(void(*Visit)(char& x),btnode *t){    if(t)    {        Visit(t->element);        PreOrder(Visit,t->lchild);        PreOrder(Visit,t->rchild);    }}void InOrder(void(*Visit)(char& x),btnode *t){    if(t)    {        InOrder(Visit,t->lchild);        Visit(t->element);        InOrder(Visit,t->rchild);    }}void PostOrder(void(*Visit)(char& x),btnode *t){    if(t)    {        PostOrder(Visit,t->lchild);        PostOrder(Visit,t->rchild);        Visit(t->element);    }}int Size(btnode *t){    if(!t) return 0;    else        return Size(t->lchild)+Size(t->rchild)+1;}void BreakTree(char &x,btnode* &t,btnode* l,btnode* r){    if(!t||&l==&r) return;    x=t->element;    l=t->lchild;    r=t->rchild;    t=NULL;}int main(){    char x;    btnode *a,*b,*c,*d;    a=MakeTree('S',NULL,NULL);    b=MakeTree('W',NULL,NULL);    c=MakeTree('D',a,b);    d=MakeTree('R',NULL,NULL);    a=MakeTree('G',d,c);    PreOrder(Visit,a);    cout<<"\n"<<Size(a)<<endl;    BreakTree(x,a,d,c);    PreOrder(Visit,d);    Clear(d);    cout<<endl;    PreOrder(Visit,c);    Clear(c);    Clear(a);}

0 0
原创粉丝点击