1064. Complete Binary Search Tree (30)
分析:
考察BST + 完全二叉树的性质,注意:
(1):先用排序排好,然后由于是完全二叉树,我们使用中序来建树。
(2):建好之后,层次遍历可以采用队列。
- #include <iostream>
- #include <stdio.h>
- #include <algorithm>
- #include <cstring>
- #include <vector>
- #include <queue>
- #include <cmath>
- using namespace std;
- vector<int> vect;
- vector<int> result;
- struct Node
- {
- int value;
- Node *left;
- Node *right;
- }*root;
- Node *In(int level, int ll, int rr)
- {
- if (ll > rr) return NULL;
- int up_level = pow(, (level - )) - ; //除最后一层外 总共有多少个
- int Last_level_left = (rr - ll) + - up_level; //最后一层剩下的
- int k = pow(, (level - ) - ); //最后一层是否布满了左分支
- int left_left;
- if (Last_level_left >= k) left_left = up_level;
- else left_left = pow(, (level - )) - + Last_level_left;
- Node *p = new Node();
- p->value = vect[left_left + ll];
- p->left = In(level - , ll, ll + left_left - );
- p->right = In(level - , ll + left_left + , rr);
- return p;
- }
- void level_order(Node *root)
- {
- queue<Node *> q;
- q.push(root);
- while (!q.empty())
- {
- Node *p = q.front();
- q.pop();
- result.push_back(p->value);
- if (p->left != NULL)
- q.push(p->left);
- if (p->right != NULL)
- q.push(p->right);
- }
- printf("%d", result[]);
- for (int i = ; i < result.size(); i++)
- printf(" %d", result[i]);
- printf("\n");
- }
- int main()
- {
- int n;
- while (cin >> n)
- {
- vect.clear();
- result.clear();
- for (int i = ; i < n; i++)
- {
- int k;
- cin >> k;
- vect.push_back(k);
- }
- sort(vect.begin(), vect.end());
- int level = log2(n) + ;
- root = In(level, , n - );
- level_order(root);
- }
- return ;
- }
1064. Complete Binary Search Tree (30)的更多相关文章
- PAT题库-1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- pat 甲级 1064. Complete Binary Search Tree (30)
1064. Complete Binary Search Tree (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- 1064. Complete Binary Search Tree (30)【二叉树】——PAT (Advanced Level) Practise
题目信息 1064. Complete Binary Search Tree (30) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B A Binary Search Tr ...
- PAT 甲级 1064 Complete Binary Search Tree (30 分)(不会做,重点复习,模拟中序遍历)
1064 Complete Binary Search Tree (30 分) A Binary Search Tree (BST) is recursively defined as a bin ...
- PAT甲级:1064 Complete Binary Search Tree (30分)
PAT甲级:1064 Complete Binary Search Tree (30分) 题干 A Binary Search Tree (BST) is recursively defined as ...
- PAT Advanced 1064 Complete Binary Search Tree (30) [⼆叉查找树BST]
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- 1064 Complete Binary Search Tree (30分)(已知中序输出层序遍历)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- 【PAT甲级】1064 Complete Binary Search Tree (30 分)
题意:输入一个正整数N(<=1000),接着输入N个非负整数(<=2000),输出完全二叉树的层次遍历. AAAAAccepted code: #define HAVE_STRUCT_TI ...
- PAT (Advanced Level) 1064. Complete Binary Search Tree (30)
因为是要构造完全二叉树,所以树的形状已经确定了. 因此只要递归确定每个节点是多少即可. #include<cstdio> #include<cstring> #include& ...
随机推荐
- C++11:POD数据类型
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 啥是POD类型? POD全称Plain Old Data.通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是 ...
- Bootstrap整体架构
大多数Bootstrap的使用者都认为Bootstrap只是提供了CSS组件和JavaScript插件,其实CSS组件和JavaScript插件只是Bootstrap框架的表现形式而已,他们都是构建在 ...
- 整理: Android HAL
这篇文章整理来自http://bbs.chinaunix.net/thread-3675980-1-1.html 在论坛中看到的Android HAL讨论,有个ID描述的比较清楚,摘录如下: temp ...
- 【转】windows7 修改环境变量 和 用不用重启电脑的讨论
原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html 先到我的电脑>属性>高级>环境变量 ...
- 65. Reverse Integer && Palindrome Number
Reverse Integer Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, re ...
- Android:去掉默认的标题bar
要使用自己定义的bar,只需要在layout文件中添加:<include layout="@layout/actionbar" />;当然你需要新建一个actionba ...
- MySQL绿色版5.7以上安装教程
写在前面:5.7增加了安全性,默认root密码不在为空,而是初始化时随机生成一个root密码,改root密码的方式也不一样了 下载地址 http://dev.mysql.com/downloads/m ...
- Windows:文件服务器,访问进去不能查看到完整的文件
文件服务器,访问进去不能查看到完整的文件:别人访问却可以查看到完整的所有文件 可能是登录的帐号串掉导致,删除文件服务器帐号,重新访问: cmd: net use /delete *
- 字符串str功能介绍
1.name.__contains__ 包含 name1='eric'result = name.__contains__(er) #name是否包含er,包含返回true,不包含返回fals p ...
- 解决Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid
重新启动服务器,访问web服务发现无法浏览啦!登陆服务器之后进到nginx使用./nginx -s reload重新读取配置文件,发现报nginx: [error] open() "/usr ...