1099. Build A Binary Search Tree (30)

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;
}

转载于:https://www.cnblogs.com/xLester/p/7570408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值