左右子树交换

 

#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()

{

你可能感兴趣的:(左右子树交换)