以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
AFDGEBC
emmm,考试的时候出了点问题,想成了是交换既有做孩子又有右孩子结点的左右孩子,所以。。现在又做了一下。要好好复习了,理论和编程都忘了好多。。
#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;
}