左右子树交换

 

#include <stdio.h>

#include <iostream.h>

#include"stdlib.h"

struct TreeNode          //树结构体定义

{

       char data;

       TreeNode *lchild,*rchild;

};

char getonech(char ar[])

{     static i;

       return ar[i++];

}

void CreateBiTree(TreeNode *&p,char ar[])       //按前序建立一个新树

{  

       char ch;

    ch=getonech(ar);

        if(ch!='*')

       {    

p=new TreeNode;

               p->data=ch;

               CreateBiTree(p->lchild,ar);

               CreateBiTree(p->rchild,ar);

       }

        else p=NULL;

}

 

void preorder(TreeNode *p)          //前序遍历

       if(p!=NULL)

    {

         cout<<p->data;               

      preorder(p->lchild);     

      preorder(p->rchild);

       }

}

 

void inorder(TreeNode *p)           //中序遍历

{

  if (p)

  {

              inorder(p->lchild); 

              cout<<p->data;     

              inorder (p->rchild);

  } 

}

 

void aforder(TreeNode *p)            //后序遍历

{

  if (p)

  {

              aforder(p->lchild);

              aforder(p->rchild);

              cout<<p->data;

  } 

}

 

 

void change(TreeNode *p)            //左右子树交换

{

       TreeNode *r;

       r=new TreeNode;

       int f1=0,f2=0;

       if(p==0) return ;                   //树为空时,跳出

    if(p->lchild)

       {

      change(p->lchild);

         r->lchild=p->lchild;

         f1++;                          //有左叶子,符号位不为空

       }

    if(p->rchild)

       {

      change(p->rchild);

         r->rchild=p->rchild;

         f2++;                           //有右叶子,符号位不为空

       }

       if(f1==0) r->lchild=NULL;            //否则,给中间变量赋空值

       if(f2==0) r->rchild=NULL;

       if(f1||f2)

       {

         p->rchild=r->lchild;               //左右子树交换

         p->lchild=r->rchild;

       }

}

 

 

 

void main()

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值