PAT (Advanced Level) Practice - 1064 Complete Binary Search Tree(30 分)

题目链接:点击打开链接

题目大意:略。

解题思路:完全二叉树有这么一个性质,若 a 节点的下标为 i,那么它左儿子的下标为 2i,右儿子为 2i+1. 而这个下标则为完全二叉树在层序遍历时的输出顺序。而对于任意一棵搜索树,其中序遍历的输出,是一个递增的数列。根据这两个性质,可以有如下算法。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

int n,l;
int a[1005], rs[1005];

void dfs(int rt)
{
    if(rt<=n)
    {
        dfs(2*rt);
        rs[rt]=a[l++];
        dfs(2*rt+1);
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        l=0;
        for(int i=0;i<n;i++) scanf("%d",&a[i]);
        sort(a,a+n);
        dfs(1);
        printf("%d",rs[1]);
        for(int i=2;i<=n;i++) printf(" %d",rs[i]);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/Dream_Weave/article/details/81387372