目录
题目
题目描述
编程程序实现将二叉树中所有结点的左右孩子互换
输入
二叉树的先序序列(输入先序序列建立二叉树)。
输出
第一行为交换后的二叉树的中序序列
第二行为交换后的二叉树的先序序列
样例输入
ABD###C###样例输出
CABD ACBD
思路
翻转二叉树可以先镜面先序遍历(根->右孩子->左孩子),并储存。然后再依次先序创建之前储存的镜面先序遍历。
//创建翻转的二叉树
char node[10005];
int sum2=0;
void create(BinaryTree* &root) {
BTNode *q;
q=new BTNode;
q->data=node[sum2++];
if(q->data=='#') {
root=q=NULL;
return;
}
root=q;
create(root->left);
create(root->right);
}
//镜面先序遍历
int sum1=0;
void sy_BTProOrder(BinaryTree* &root) {
if(root==NULL) {
node[sum1++]='#';
return;
}
node[sum1++]=root->data;
sy_BTProOrder(root->right);
sy_BTProOrder(root->left);
}
代码
#include <bits/stdc++.h>
using namespace std;
//定义
typedef struct BTNode {
char data;
BTNode *left;
BTNode *right;
}BinaryTree;
void Create(BinaryTree* &root) {
BTNode *q;
q=new BTNode;
cin>>q->data;
if(q->data=='#') {
root=q=NULL;
return;
}
root=q;
Create(root->left);
Create(root->right);
}
//创建二叉树
char node[10005];
int sum2=0;
void create(BinaryTree* &root) {
BTNode *q;
q=new BTNode;
q->data=node[sum2++];
if(q->data=='#') {
root=q=NULL;
return;
}
root=q;
create(root->left);
create(root->right);
}
//镜面先序遍历
int sum=0;
void sy_BTProOrder(BinaryTree* &root) {
if(root==NULL) {
node[sum++]='#';
return;
}
node[sum++]=root->data;
sy_BTProOrder(root->right);
sy_BTProOrder(root->left);
}
//前序遍历
void BTProOrder(BinaryTree* &root) {
if(root==NULL) return;
cout<<root->data;
BTProOrder(root->left);
BTProOrder(root->right);
}
//中序遍历
void BTInOrder(BinaryTree* &root) {
if(root==NULL) return;
BTInOrder(root->left);
cout<<root->data;
BTInOrder(root->right);
}
int main() {
BinaryTree *root1,*root2;
Create(root1);
sy_BTProOrder(root1);
create(root2);
BTInOrder(root2);
cout<<endl;
BTProOrder(root2);
return 0;
}