/*编写算法交换二叉树中所有节点的左右子树*/
#include"stdio.h"
#include"malloc.h"
#define maxsize 10//节点个数
typedef struct node{
char data;
struct node *lchile,*rchile;
}Bitree;
/*奈荞无音:鸣人的儿子博人问鸣人:“爸爸,你年轻的时候干了什么伟大的事啊?”鸣人摸了摸他的头,然后说:“我用了十五年,帮我曾经最喜欢的女生追回了她的丈夫。”
博人又问:“那妈妈呢?”鸣人眼里光线都温柔了,“妈妈坚持爱到了我爱她的那一天。”*/
//建立二叉树
Bitree *Q[maxsize];
Bitree *Creattree(){
char ch;
int front,rear;
Bitree *T,*s;
T=NULL; //置空二叉树
front=1;rear=0; //置空队列
ch=getchar(); //输入第一个字符
while(ch!='#'){ //不是结束符号时继续,则无需为虚节点申请空间
s=NULL;
if(ch!='@'){//@表示虚节点,不是虚节点时建立新节点
s=(Bitree*)malloc(sizeof(Bitree));
s->data=ch;
s->lchile=s->rchile=NULL;
}
rear++;
Q[rear]=s;
if(rear==1) T=s;
else{
if(s!=NULL && Q[front]!=NULL)
if(rear%2==0) Q[front]->lchile=s;
else Q[front]->rchile=s;
if(rear%2==1) front++;
}
ch=getchar();
}
return T;
}
//先序遍历二叉树
void Preorder(Bitree *T){
if(T){
printf("%c\t",T->data);
Preorder(T->lchile);
Preorder(T->rchile);
}
}
//交换左右子树
void *swap(Bitree *T){
Bitree *temp;
if(T){
temp=T->lchile;
T->lchile=T->rchile;
T->rchile=temp;
swap(T->lchile);
swap(T->rchile);
}
}
int main(){
Bitree *T;
printf("请根据中序输入%d个节点:@表示虚节点,#表示结束\n",maxsize);
T=Creattree();
printf("二叉树建立完毕!!!兄弟!!!先序遍历数据如下:\n");
Preorder(T);
printf("开始交换左右子树!!\n");
swap(T);
printf("交换结果为:\n");
Preorder(T);
return 0;
}
#include"stdio.h"
#include"malloc.h"
#define maxsize 10//节点个数
typedef struct node{
char data;
struct node *lchile,*rchile;
}Bitree;
/*奈荞无音:鸣人的儿子博人问鸣人:“爸爸,你年轻的时候干了什么伟大的事啊?”鸣人摸了摸他的头,然后说:“我用了十五年,帮我曾经最喜欢的女生追回了她的丈夫。”
博人又问:“那妈妈呢?”鸣人眼里光线都温柔了,“妈妈坚持爱到了我爱她的那一天。”*/
//建立二叉树
Bitree *Q[maxsize];
Bitree *Creattree(){
char ch;
int front,rear;
Bitree *T,*s;
T=NULL; //置空二叉树
front=1;rear=0; //置空队列
ch=getchar(); //输入第一个字符
while(ch!='#'){ //不是结束符号时继续,则无需为虚节点申请空间
s=NULL;
if(ch!='@'){//@表示虚节点,不是虚节点时建立新节点
s=(Bitree*)malloc(sizeof(Bitree));
s->data=ch;
s->lchile=s->rchile=NULL;
}
rear++;
Q[rear]=s;
if(rear==1) T=s;
else{
if(s!=NULL && Q[front]!=NULL)
if(rear%2==0) Q[front]->lchile=s;
else Q[front]->rchile=s;
if(rear%2==1) front++;
}
ch=getchar();
}
return T;
}
//先序遍历二叉树
void Preorder(Bitree *T){
if(T){
printf("%c\t",T->data);
Preorder(T->lchile);
Preorder(T->rchile);
}
}
//交换左右子树
void *swap(Bitree *T){
Bitree *temp;
if(T){
temp=T->lchile;
T->lchile=T->rchile;
T->rchile=temp;
swap(T->lchile);
swap(T->rchile);
}
}
int main(){
Bitree *T;
printf("请根据中序输入%d个节点:@表示虚节点,#表示结束\n",maxsize);
T=Creattree();
printf("二叉树建立完毕!!!兄弟!!!先序遍历数据如下:\n");
Preorder(T);
printf("开始交换左右子树!!\n");
swap(T);
printf("交换结果为:\n");
Preorder(T);
return 0;
}