首页 > 代码库 > PAT 1064 Complete Binary Search Tree
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 node71 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\n", val); // last element91 }92 }93 }94 return 0;95 }
又是跟书本比较近的一题
PAT 1064 Complete Binary Search Tree
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。