欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

天梯赛练习——Complete Binary Search Tree (30分)

程序员文章站 2022-06-07 21:44:34
...

题目:

天梯赛练习——Complete Binary Search Tree (30分)

分析:

本题涉及到 完全二叉树 二叉搜索树,对于给出的数据,只要经过排序之后则一定为二叉搜索树中序遍历的结果,由于题目要求的是构造完全二叉树,所以对于下标为 x 的节点,左孩子一定为 2x , 右孩子一定为 2x+1,则使用递归建树即可

代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 1005;
int num[MAXN],ans[MAXN];
int n,cnt;

void BuildTree(int root)
{
    if(root > n) return;
    BuildTree(2*root);   //利用了完全二叉树的性质
    ans[root] = num[++cnt];
    BuildTree(2*root+1);
}

int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&num[i]);
    sort(num+1,num+n+1);
    BuildTree(1);
    for(int i=1;i<=n;++i)
        if(i == n)
            printf("%d\n",ans[i]);
        else
            printf("%d ",ans[i]);
    return 0;
}

相关标签: # 天梯赛