zoukankan      html  css  js  c++  java
  • PAT 1064 Complete Binary Search Tree

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <vector>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 class Node {
    10 public:
    11     int val;
    12     Node* left;
    13     Node* right;
    14 public:
    15     Node(): val(0), left(NULL), right(NULL) {}
    16     Node(int _val, Node* _left = NULL, Node* _right = NULL): val(_val), left(_left), right(_right) {}
    17 };
    18 
    19 vector<Node*> build_next_level(vector<Node*> last_level, int &num) {
    20     vector<Node*> res;
    21     if (num < 1) return res;
    22     
    23     for (auto iter = last_level.begin(); iter != last_level.end(); iter++) {
    24         Node* parent = *iter;
    25         
    26         Node* lchild = new Node();
    27         res.push_back(lchild);
    28         parent->left = lchild;
    29         if (--num < 1) break;
    30         
    31         Node* rchild = new Node();
    32         res.push_back(rchild);
    33         parent->right= rchild;
    34         if (--num < 1) break;
    35     }
    36     
    37     return res;
    38 }
    39 
    40 void inorder_traverse(Node* root, int& order) {
    41     if (root == NULL) return;
    42     inorder_traverse(root->left, order);
    43     root->val = order++;
    44     inorder_traverse(root->right, order);
    45 }
    46 
    47 int main() {
    48     int cnt;
    49 
    50     scanf("%d", &cnt);
    51     
    52     vector<int> nums(cnt, 0);
    53     
    54     if (cnt < 1) return 0;
    55     
    56     for (int i = 0; i<cnt; i++) {
    57         int num = 0;
    58         scanf("%d", &num);
    59         nums[i] = num;
    60     }
    61     sort(nums.begin(), nums.end());
    62     
    63     vector<vector<Node*> > levels;
    64 
    65     vector<Node*> last_level;
    66     last_level.push_back(new Node());
    67 
    68     levels.push_back(last_level);
    69     
    70     int node_cnt = cnt - 1; // we already pushed the root node
    71     while (node_cnt > 0) {
    72         vector<Node*> cur_level = build_next_level(last_level, node_cnt);
    73         levels.push_back(cur_level);
    74         swap(last_level, cur_level);
    75     }
    76 
    77     int order = 0;
    78     inorder_traverse(levels[0][0], order);
    79     
    80     node_cnt = cnt;
    81     
    82     for (auto iter_levels = levels.begin(); iter_levels != levels.end(); iter_levels++) {
    83         vector<Node*>& cur_level = *iter_levels;
    84         for (auto iter = cur_level.begin(); iter != cur_level.end(); iter++) {
    85             Node* node = *iter;
    86             int val = nums[node->val];
    87             if (--node_cnt > 0) {
    88                 printf("%d ", val);
    89             } else {
    90                 printf("%d
    ", val); // last element
    91             }
    92         }
    93     }
    94     return 0;
    95 }

    又是跟书本比较近的一题

  • 相关阅读:
    1058 A+B in Hogwarts (20)
    1046 Shortest Distance (20)
    1061 Dating (20)
    1041 Be Unique (20)
    1015 Reversible Primes (20)(20 分)
    pat 1027 Colors in Mars (20)
    PAT 1008 Elevator (20)
    操作系统 死锁
    Ajax的get方式传值 避免& 与= 号
    让IE浏览器支持CSS3表现
  • 原文地址:https://www.cnblogs.com/lailailai/p/3996186.html
Copyright © 2011-2022 走看看