#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct BTNode {
char data ;
struct BTNode *lchild;
struct BTNode *rchild ;
} *BiTree;
void createBiTree(BiTree *t) {
//此处补充代码,输入二叉树的先序遍历序列建立二叉树
char s;
BiTree q;
s = getchar();
getchar();
if (s == '#') {
*t = NULL;
return ;
}
q = (BiTree)malloc(sizeof(struct BTNode));
q->data = s;
*t = q;
createBiTree(&q->lchild);
createBiTree(&q->rchild);
}
//此处补充代码,定义函数,交换二叉树结点的左右孩子
void swapChildren(BiTree p) {
if (p) {
BiTree temp = p->lchild;
p->lchild = p->rchild;
p->rchild = temp;
swapChildren(p->lchild);
swapChildren(p->rchild);
}
}
void PreOrder(BiTree p) {
//此处补充代码完成二叉树的先序遍历
if (p) {
printf("%c", p->data);
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}
void InOrder(BiTree p) {
//此处补充代码完成二叉树的中序遍历
if (p) {
InOrder(p->lchild);
printf("%c", p->data);
InOrder(p->rchild);
}
}
void PostOrder(BiTree p) {
//此处补充代码完成二叉树的后序遍历
if (p) {
PostOrder(p->lchild);
PostOrder(p->rchild);
printf("%c", p->data);
}
}
int main() {
//此处补充代码,调用函数完成原二叉树的三种遍历序列及交换左右孩子后的三种遍历序列
BiTree t = NULL;
createBiTree(&t);
printf("preorder:");
PreOrder(t);
printf("\n");
printf("inorder:");
InOrder(t);
printf("\n");
printf("postorder:");
PostOrder(t);
printf("\n");
printf("After swap:");
swapChildren(t);
printf("\n");
printf("preorder:");
PreOrder(t);
printf("\n");
printf("inorder:");
InOrder(t);
printf("\n");
printf("postorder:");
PostOrder(t);
printf("\n");
return 0;
}
标签:lchild,遍历,BiTree,交换,二叉树,printf,rchild
From: https://blog.51cto.com/u_16030624/6532473