zoukankan      html  css  js  c++  java
  • 1064 Complete Binary Search Tree (30 分)

    参考:https://blog.csdn.net/richenyunqi/article/details/78868563

     1 #pragma warning(disable:4996)
     2 #define _CRT_SECURE_NO_WARNINGS
     3 
     4 #include <iostream>
     5 #include <algorithm>
     6 #include <cmath>
     7 #include <vector>
     8 #include <map>
     9 #include <set>
    10 #include <unordered_set>
    11 #include <unordered_map>
    12 #include <queue>
    13 #include <cmath>
    14 #include <string>
    15 #define INFINITE 65535
    16 using namespace std;
    17 int A[1010], tree[1010];
    18 void createTree(int left, int right, int index) {
    19     //求左子树的个数
    20     if (left > right) return;
    21     //else if(left == right){
    22     //    tree[index] = A[left];
    23     //    return;
    24     //}
    25     int depth = (int)floor(log(right - left + 2)/log(2));
    26     int last_half = pow(2, depth - 1);//最后一层一半
    27     int front = 2 * last_half - 1;//除去最后一层的数量
    28     int left_last = min(last_half, right - left + 1 - front);//最后一层左子树的数量
    29     int root = left + last_half - 1 + left_last;//求出根节点在A中的位置
    30     tree[index] = A[root];//给完全二叉树中的根节点赋值
    31     //递归处理左右子树
    32     createTree(left, root - 1, 2 * index);
    33     createTree(root + 1, right, 2 * index + 1);
    34 }
    35 int main() {
    36     int n;
    37     cin >> n;
    38     for (int i = 0; i < n; ++i) {
    39         cin >> A[i];
    40     }
    41     sort(A, A + n);
    42     createTree(0, n - 1, 1);
    43     for (int i = 1; i <= n; ++i) {
    44         if (i != 1) cout << " ";
    45         cout << tree[i];
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    Redis集群搭建步骤
    JS性能优化
    javaweb中实现在线人数统计
    tomcat在linux中启动慢的解决方案
    Redis高可用架构
    bjpowernode课程体系及题库
    java 相关
    码农翻身全年文章精华
    Spring源码深度解析
    PHPSTROM快捷键备份
  • 原文地址:https://www.cnblogs.com/2020R/p/14479089.html
Copyright © 2011-2022 走看看