【问题描述】
编写递归算法,将二叉树中所有节点的左、右子树相互交换。
【输入形式】
按先序序列输入二叉树各结点的值,结点的值是单字符,空子树输入空格。
【输出形式】
先输出交换后的二叉树的先序序列,再输出中序序列。
【样例输入】
例如三个的满二叉树,输入:a,b, , ,c, , (b后有两个空格,表示b有两棵子树;c后有两个空格)
【样例输出】
上面的满二叉树交换后的输出:
acb //先序序列
cab //中序序列
C++代码实现
//【问题描述】编写递归算法,将二叉树中所有节点的左、右子树相互交换。
//【输入形式】按先序序列输入二叉树各结点的值,结点的值是单字符,空子树输入空格。
//【输出形式】先输出交换后的二叉树的先序序列,再输出中序序列。
//【样例输入】例如三个的满二叉树,输入:a,b, , ,c, , (b后有两个空格,表示b有两棵子树;c后有两个空格)
//【样例输出】上面的满二叉树交换后的输出:
//acb //先序序列
//cab //中序序列
#include<iostream>
#include<cstdio>
using namespace std;
struct tree {
char data;
tree* lchild;
tree* rchild;
};
void preorder(tree* t) {
if (t == NULL)
return;
cout << t->data;
preorder(t->lchild);
preorder(t->rchild);
}
void inorder(tree* t) {
if (t == NULL)
return;
inorder(t->lchild);
cout << t->data;
inorder(t->rchild);
}
tree* create() {
tree* t;
char ch = '\0';
scanf("%c,", &ch);
if (ch == ' ')
t = NULL;
else {
t = new tree;
t->data = ch;
t->lchild = create();
t->rchild = create();
}
return t;
}
void exchange(tree* t) { //交换左右子树
tree* temp;
if (t != NULL) {
exchange(t->lchild);
exchange(t->rchild);
temp = t->lchild;
t->lchild = t->rchild;
t->rchild = temp;
}
}
int main() {
tree* t = create();
exchange(t);
preorder(t);
cout << endl;
inorder(t);
return 0;
}