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