Bootstrap

【问题描述】编写递归算法,将二叉树中所有节点的左、右子树相互交换。

cg题

【问题描述】

编写递归算法,将二叉树中所有节点的左、右子树相互交换。

【输入形式】

按先序序列输入二叉树各结点的值,结点的值是单字符,空子树输入空格。

【输出形式】

先输出交换后的二叉树的先序序列,再输出中序序列。

【样例输入】

例如三个的满二叉树,输入: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;
}
;