编写算法交换二叉树中所有结点的左
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编写算法交换二叉树中所有结点的左、右子树
#include"stdio.h"
#include"malloc.h"
#define maxsize 10
#define NULL 0
typedef struct node{
char data;
struct node *lchild,*rchild;
}Bintree;
Bintree *Q[maxsize];
Bintree *creatree(){
char ch;
int front=1,rear=0;
Bintree *T,*S;
T=NULL;
ch=getchar();
while(ch!='#'){
S=NULL;
if(ch!='@'){
S=(Bintree *)malloc(sizeof(Bintree));
S->data=ch;
S->lchild=S->rchild=NULL;
}
rear++;
Q[rear]=S;
if(rear==1) T=S;
else{ if(S!=NULL&&Q[front]!=NULL)
if(rear%2==0) Q[front]->lchild=S;
else Q[front]->rchild=S;
if(rear%2==1) front++;
}
ch=getchar();
}
return T;
}
void printree(Bintree *T){
if(T){ printf("%2c",T->data);
printree(T->lchild);
printree(T->rchild);
}
}
void changetree(Bintree *T){
if(T){ Bintree *A;
changetree(T->lchild);
changetree(T->rchild);
A=T->lchild;
T->lchild=T->rchild;
T->rchild=A;
}
}
void main(){
Bintree *TR;
printf("创建二叉树:");
TR=creatree();
printf("先序遍历输出初始化二叉树为:");
printree(TR);
printf("\n");
changetree(TR);
printf("先序遍历输出交换左右子树后的二叉树为:"); printree(TR);
printf("\n");
}