心血来潮整理出了有关二叉树的大部分基础的函数
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,f;
struct tree_node{
int val;
tree_node *l;
tree_node *r;
};
tree_node *root;
vector<int> pre(N,0),mid(N,0),pos(N,0);
void get_clear(tree_node *t){
if(t==NULL) return;
get_clear(t->l);
get_clear(t->r);
delete t;
}
tree_node *build_tree_by_pre_mid(int ipre,int imid,int len){
if(len==0) return NULL;
tree_node *p=new tree_node;
p->val=pre[ipre];
int i=0;
while(pre[ipre]!=mid[imid+i]) i++;
p->l=build_tree_by_pre_mid(ipre+1,imid,i);
p->r=build_tree_by_pre_mid(ipre+i+1,imid+i+1,len-i-1);
return p;
}
tree_node *build_tree_by_mid_pos(int ipos,int imid,int n){
if(imid>n) return NULL;
tree_node *p=new tree_node;
p->val=pos[ipos];
int i=imid;
while(pos[ipos]!=mid[i]) i++;
p->l=build_tree_by_mid_pos(ipos-(n-i)-1,imid,i-1);
p->r=build_tree_by_mid_pos(ipos-1,i+1,n);
return p;
}
void print_pre_order(tree_node *t){
if(t==NULL) return;
if(!f){
f=1;
cout<<t->val;
}
else cout<<" "<<t->val;
if(t->l) print_pre_order(t->l);
if(t->r) print_pre_order(t->r);
}
void print_mid_order(tree_node *t){
if(t==NULL) return;
if(t->l) print_mid_order(t->l);
if(!f){
f=1;
cout<<t->val;
}
else cout<<" "<<t->val;
if(t->r) print_mid_order(t->r);
}
void print_pos_order(tree_node *t){
if(t==NULL) return;
if(t->l) print_pos_order(t->l);
if(t->r) print_pos_order(t->r);
if(!f){
f=1;
cout<<t->val;
}
else cout<<" "<<t->val;
}
void print_level_order(tree_node *t){
if(t==NULL) return;
queue<tree_node*> q;
q.push(t);
while(!q.empty())
{
tree_node *cur=q.front();
q.pop();
if(!f){
cout<<cur->val;
f=1;
}
else cout<<" "<<cur->val;
if(cur->l) q.push(cur->l);
if(cur->r) q.push(cur->r);
}
}
void exchange(tree_node *t){
if(t==NULL) return;
tree_node *temp;
temp=t->l;
t->l=t->r;
t->r=temp;
if(t->l) exchange(t->l);
if(t->r) exchange(t->r);
}
int main()
{
while(cin>>n){
get_clear(root);f=0;
pre.clear();mid.clear();pos.clear();
cout<<endl;
}
return 0;
}