1099. Build A Binary Search Tree (30)
#include <iostream>//更新于2017/5/26
#include <algorithm>
using namespace std;
struct node
{
int left,right;
int data;
}T[102];
int a[102],k=0;
void Traverse(int r)
{
if(r!=-1)
{
Traverse(T[r].left);
T[r].data=a[k++];
Traverse(T[r].right);
}
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;++i)
{
int l,r;
cin>>l>>r;
T[i].left=l;
T[i].right=r;
}
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
Traverse(0);
int queue[1000],f=0,r=0;
queue[r++]=0;
while(f!=r)
{
--k;
int s=queue[f++];
k==0?cout<<T[s].data:cout<<T[s].data<<" ";
if(T[s].left!=-1) queue[r++]=T[s].left;
if(T[s].right!=-1) queue[r++]=T[s].right;
}
return 0;
}
previous
#include <stdio.h>
#include <stdlib.h>
struct bst
{
int left,right;
int data;
}node[101];
int a[101],cur=0;
struct bst *queue[101];
int front,rear;
int comp(const void *a,const void*b)
{
return *((int*)a)-*((int*)b);
}
void bstTraverse(int *cur,int t)
{
if(t!=-1)
{
bstTraverse(cur,node[t].left);
node[t].data=a[(*cur)++];
bstTraverse(cur,node[t].right);
}
}
int main()
{
int n,i=0;
scanf("%d",&n);
while(i<n)
{
scanf("%d %d",&node[i].left,&node[i].right);
++i;
}
for(i=0;i<n;++i)
scanf("%d",&a[i]);
qsort(a,n,sizeof(int),comp);
bstTraverse(&cur,0);
queue[rear++]=&node[0];
while(front<rear)
{
struct bst *t=queue[front++];
printf("%d",t->data);
if(t->left!=-1)
queue[rear++]=&node[t->left];
if(t->right!=-1)
queue[rear++]=&node[t->right];
--n;
if(n)printf(" ");
}
return 0;
}