二叉树交换左右子树
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node{ //二叉树的链式存储结点
char data;
struct Node *Lchild;
struct Node *Rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree *root){ //形参采用二级指针,实参为结点孩子域地址
char ch;
ch=getchar();
if(ch=='#') *root=NULL;
else{
*root=(BiTree)malloc(sizeof(BiTree));
(*root)->data=ch;
CreateBiTree(&((*root)->Lchild));
CreateBiTree(&((*root)->Rchild));
}
}
void Visit(char data){
printf("%c",data);
}
void PreOrder(BiTree T,char a){ //先序递归遍历
if(T){
if(a=='x') Visit(T->data);
if(a=='y'){
BiTree T2=T->Lchild;
T->Lchild=T->Rchild;
T->Rchild=T2;
}
PreOrder(T->Lchild,a);
PreOrder(T->Rchild,a);
}
}
void InOrder(BiTree T){ //中序递归遍历
if(T){
InOrder(T->Lchild);
Visit(T->data);
InOrder(T->Rchild);
}
}
void PostOrder(BiTree T){ //后序递归遍历
if(T){
PostOrder(T->Lchild);
PostOrder(T->Rchild);
Visit(T->data);
}
}
int main(){
BiTree T;
CreateBiTree(&T);
PreOrder(T,'y');
PreOrder(T,'x');
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
return 0;
}