首页 > 其他 > 详细

1064 Complete Binary Search Tree (30分)

时间:2020-05-31 22:37:34      阅读:61      评论:0      收藏:0      [点我收藏+]

这题的话,首先要知道什么是满二叉树,满二叉树就是和完全二叉树的点一一对应,但是最下面一层可以不放满,但是左边的叉不能为空,必须从左到右排列的一种树。
这题借鉴了别人的思路:
为了让左边放满,我们中序遍历构建一颗二叉树,这样就保证左边的点可以放满了,同时和完全二叉树点的编号一一对应,这个思路真的挺不错的。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN=1e6+10;

int a[1009],b[1009];
int N,ind=1;

void dfs(int rt) {
    if (rt>N) return;
    dfs(rt*2);
    b[rt]=a[ind++];
    dfs(rt*2+1);
}

int main() {
//     freopen("in.txt","r",stdin);

    scanf("%d",&N);
    for (int i=1;i<=N;i++) { scanf("%d",&a[i]); }
    sort(a+1,a+1+N);
    dfs(1);
    for (int i=1;i<=N;i++) { printf("%d",b[i]); if (i<N) putchar(‘ ‘); }
    return 0;
}

1064 Complete Binary Search Tree (30分)

原文:https://www.cnblogs.com/xyqxyq/p/13021856.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!