看注释
#include<cstdio>
using namespace std;
/*
需要注意的问题有两个,
第一是newNode重置好,否则多次利用内存池中节点会溢出
第二是insert的时候需要忽略重复节点
*/
const int MAXN = 105;
struct Node{
int val;
Node *l,*r;
}buf[MAXN];
int i =0;
Node * newNode(){
buf[i].l=buf[i].r=NULL;
return &buf[i++];
}
Node* insert(Node * p,int val){//notes:二叉排序树插入模板
if(p==NULL){
p = newNode();
p->val = val;
}else if(val>p->val)
p->r=insert(p->r,val);
else if(val<p->val)
p->l=insert(p->l,val);
return p;
}
void postOrder(Node * cur){
if(cur==NULL)return;
postOrder(cur->l);
postOrder(cur->r);
printf("%d ",cur->val);
}
void inOrder(Node * cur){
if(cur==NULL)return;
inOrder(cur->l);
printf("%d ",cur->val);
inOrder(cur->r);
}
void preOrder(Node * cur){
if(cur==NULL)return;
printf("%d ",cur->val);
preOrder(cur->l);
preOrder(cur->r);
}
int main(){
int n,t;
Node *root;
while(~scanf("%d",&n)){
root = NULL;
i=0;
while(n--){
scanf("%d",&t);
root = insert(root,t);
}
preOrder(root);
printf("\n");
inOrder(root);
printf("\n");
postOrder(root);
printf("\n");
}
return 0;
}