以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
AFDGEBC
代码实现
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode {
char data;
BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
void create(BiTree &T) {//根据前序遍历序列建立二叉树
char ch;
scanf("%c", &ch);
if (ch != '#') {
T = (BiTNode *)malloc(sizeof(BiTNode));
T->data = ch;
create(T->lchild);
create(T->rchild);
} else
T = NULL;
}
void InOrderTraverse(BiTree T) {
if (T != NULL) {
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
} else
return;
}
void change(BiTree &T) {
BiTNode *p = T->lchild;
if (T->lchild != NULL)
change(T->lchild);
if (T->rchild != NULL)
change(T->rchild);
T->lchild=T->rchild;
T->rchild=p;
}
int main() {
BiTree T;
create(T);
InOrderTraverse(T);
printf("\n");
change(T);
InOrderTraverse(T);
}