交换二叉树中每个结点的左孩子和右孩子
分数 60
作者 陈晓梅
单位 广东外语外贸大学
以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
AFDGEBC
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <iostream>
using namespace std;
typedef struct Node {
char data;
struct Node *left, *right;
} Node, *Tree;
Tree create() {
char ch;
Tree tree = NULL;
if (scanf("%c", &ch)) {//当有输入时
if (ch != '#') {
tree = (Tree)malloc(sizeof(Node));
tree->data = ch;
tree->left = create();
tree->right = create();
} else {
tree = NULL;
}
}
return tree;
}
void order(Tree tree) {
if (!tree)
return;
order(tree->left);
printf("%c", tree->data);
order(tree->right);
}
void swap(Tree tree) {
if (!tree)
return;
if (!tree->left && !tree->right)
return;
Tree tmp = tree->left;
tree->left = tree->right;
tree->right = tmp;
swap(tree->left);
swap(tree->right);
}
int main() {
Tree tree = create();
order(tree);
cout << endl;
swap(tree);
order(tree);
return 0;
}