zoukankan      html  css  js  c++  java
  • 建堆[HihoCoder-1405]

    Building Heap HihoCoder-1405

    hihoCoder太阁最新面经算法竞赛11

    问题大意:给定一个$N$个元素的数组$A$(元素互不相同),要求你建立满足下列要求的二叉树$T$,并输出其前序遍历:

    1)$T$满足最小堆性质;

    2)输入的数组$A$满足$T$的中序遍历。

    这是一道数据结构基础题,主要是解决如何建堆。题目要求最小堆,其树根必然是整个树的最小值。因此在建堆过程中,只需寻找最小值,根据找到的最小值的位置将中序遍历的序列一分为二,继续对这两个子序列建堆,直到子序列没有元素为止。利用递归很容易写出程序。这道题要求输出前序遍历结果,因此可以不用实际建堆而直接在建堆的同时输出即可。时间复杂度为$O(n m{log}n)$。

     1 #include<iostream>
     2 using namespace std;
     3 template<typename T>
     4 int findmin(T A[], int size)
     5 {
     6     int min = 0;
     7     for (int i = 1; i < size; i++)
     8         if (A[i] < A[min])
     9             min = i;
    10     return min;
    11 }
    12 void bheap(int A[], int size)
    13 {
    14     int minpos = findmin(A, size);
    15     cout << A[minpos] << " ";
    16     if (minpos!=0)
    17         bheap(A, minpos);
    18     if (minpos != size - 1)
    19         bheap(A + minpos + 1, size - minpos - 1);;
    20 }
    21 int main()
    22 {
    23 #define TMAX 150
    24     int A[TMAX];
    25     int n;
    26     cin >> n;
    27     for (int i = 0; i < n; i++)
    28         std::cin >> A[i];
    29     bheap(A, n);
    30     return 0;
    31 }
  • 相关阅读:
    PAT 甲级1135. Is It A Red-Black Tree (30)
    AVL树模板
    定时器模板
    Listview模板
    Hash二次探测
    BFS小结
    STL之set篇
    完全二叉树-已知中序排序,输出广度排序
    BZOJ2037: [Sdoi2008]Sue的小球
    poj1157LITTLE SHOP OF FLOWERS
  • 原文地址:https://www.cnblogs.com/ggggg63/p/6706448.html
Copyright © 2011-2022 走看看