二叉树的基本操作

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值