1105: 交换二叉树的孩子结点
- 先序建树,中序和先序输出的时候把左节点当成右节点,右节点当成左节点即可(先右后左),不用再写一个交换左右节点的函数
- 具体操作见代码
附上代码
#include<bits/stdc++.h>
#define lowbit(x) (x &(-x))
#define endl '\n'
using namespace std;
const int INF=0x3f3f3f3f;
const int dir[4][2]={-1,0,1,0,0,-1,0,1};
const double PI=acos(-1.0);
const double e=exp(1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=2e5+10;
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ull;
struct node{
char data;
node *left,*right;
}*Tree;
void build(node *&Tree){
char c;
cin>>c;
if(c=='#')
Tree=NULL;
else{
Tree=new node;
Tree->data=c;
build(Tree->left);
build(Tree->right);
}
}
void mid_order(node *&Tree){
if(Tree!=NULL){
mid_order(Tree->right);
cout<<Tree->data;
mid_order(Tree->left);
}
}
void pre_order(node *&Tree){
if(Tree!=NULL){
cout<<Tree->data;
pre_order(Tree->right);
pre_order(Tree->left);
}
}
int main(){
build(Tree);
mid_order(Tree);
cout<<endl;
pre_order(Tree);
return 0;
}