链接: KY223 二叉排序树
#include <iostream>
#include <cstring>
using namespace std;
const int N=110;
int h, e[N], l[N], r[N], idx;
void insert(int x) {
e[idx]=x;
if (h==-1) {
h=idx++;
return;
}
//找到要插入位置的父节点p
int p=0, q=h;
while (q!=-1) {
p=q;
int j=e[q];
if (x==j) return;
else if (x<j) q=l[q];
else q=r[q];
}
if (x<e[p]) l[p]=idx++;
else r[p]=idx++;
}
void front(int h) { //前序遍历
if (h==-1) return;
cout<<e[h]<<" ";
front(l[h]);
front(r[h]);
}
void mid(int h) { //中序遍历
if (h==-1) return;
mid(l[h]);
cout<<e[h]<<" ";
mid(r[h]);
}
void back(int h) { //后序遍历
if (h==-1) return;
back(l[h]);
back(r[h]);
cout<<e[h]<<" ";
}
void init () {
h=-1, idx=0;
memset(e, 0, sizeof e);
memset(l, -1, sizeof l);
memset(r, -1, sizeof r);
}
int main() {
int n;
while (cin>>n) {
init();
while (n--) {
int x;
cin>>x;
insert(x);
}
front(0); cout<<endl;
mid(0); cout<<endl;
back(0); cout<<endl;
}
return 0;
}