//** 2195 - 二叉排序树 --- 特殊二叉树
//** 来源: 东方博宜oj oj.czos.cn
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
// 孩子表示法
struct node
{
int c,lc,rc;
}a[N];
int n;
// 中序遍历
void dfs1(int x)
{
if(a[x].lc) dfs1(a[x].lc);
cout<< a[x].c<< " ";
if(a[x].rc) dfs1(a[x].rc);
}
// 后序遍历
void dfs2(int x)
{
if(a[x].lc) dfs2(a[x].lc);
if(a[x].rc) dfs2(a[x].rc);
cout<< a[x].c<< " ";
}
int main()
{
cin>>n;
int x,p;
for(int i=1;i<=n;i++)
{
cin>>x;
a[i].c=x; //将第i个节点存储
// 第一个节点只能是根
if(i==1) continue;
// 找一个节点p,当作当前节点的父
p=1; //从根开始比较
while(1)
{
//如果在左子树
if(x<a[p].c)
{
//如果有左子树
if(a[p].lc) p=a[p].lc;
else
{
a[p].lc=i;
break;
}
}
else //在右子树
{
if(a[p].rc) p=a[p].rc;
else
{
a[p].rc=i;
break;
}
}
}
}
dfs1(1);
cout<<endl;
dfs2(1);
return 0;
}
2195 - 二叉排序树 --- 特殊二叉树
最新推荐文章于 2024-10-02 23:46:40 发布