Codeforces Round #353 (Div. 2) D. Tree Construction (BST询问父亲节点)
来源:互联网 发布:宏正软件 编辑:程序博客网 时间:2024/06/03 16:00
题意:
给出n个不同的数,按照给出的顺序构造二叉排序树BST,第1个数为根节点。输出2-n个
节点的父亲节点。
分析:
二叉排序树的平均复杂度是log2n,最坏情况下变成线性的,复杂度为n。
对n个节点的插入操作如果用结构体指针的写法最坏情况下为n2=1010,这样会超时。
开始没有注意这点,TLE。但是正好复习了BST的插入操作递归和非递归的写法。
易知,插入的数的父亲节点是已插入的比它大或者比它小的与其最接近的数之一。
这个题利用set保存输入的数,用两个map分别记录左右孩子。
每次找到第一个大于v的数的位置。如果是最后一个,则前一个比它小的数的右孩子是该数;
否则,若找到的位置的左孩子为空,则该数为其左孩子,若不为空,则该数为前一个位置比
它小的数的右孩子。
这样复杂度是nlogn(循环n,lower_bound二分原理复杂度为logn)
#include<cstdio>#include<map>#include<algorithm>#include<iostream>#include<set>using namespace std;typedef long long ll;set<int> numbers;map<int,int> L,R;int main(){ int n,v; while(~scanf("%d",&n)) { numbers.clear(); L.clear(); R.clear(); for(int i=0;i<n;i++) { scanf("%d",&v); if(i==0) numbers.insert(v); else { set<int>::iterator iter; iter = numbers.lower_bound(v); if(iter == numbers.end()) R[*(--iter)] = v; else { if(!L[*iter]) L[*iter] = v; else R[*(--iter)] = v; } if(i==1) printf("%d",*iter); else printf(" %d",*iter); numbers.insert(v); } } printf("\n"); } return 0;}
0 0
- Codeforces Round #353 (Div. 2) D. Tree Construction (BST询问父亲节点)
- Codeforces Round #353 (Div. 2) D. Tree Construction (BST)
- Codeforces Round #353 (Div. 2) D. Tree Construction
- Codeforces Round #353 (Div. 2)D. Tree Construction
- Codeforces Round #353 (Div. 2) D. Tree Construction
- Codeforces Round #353 (Div. 2) D. Tree Construction(每个点按照二叉树排序树的插入插入到树中,问最后每个点的父亲节点的值是多少)
- Codeforces Round #353 (Div. 2) D. Tree Construction __ Binary Search Tree
- Codeforces Round #353 (Div. 2) D. Tree Construction (二叉搜索树+set)
- Codeforces Round #353 (Div. 2) D. Tree Construction (构造二叉搜索树)
- Codeforces 675D Tree Construction【构造,BST】
- Codeforces Round #316 (Div. 2) D. Tree Requests
- Codeforces Round #316 (Div. 2) D. Tree Requests dfs_clock,二分
- Codeforces Round #316 (Div. 2) D Tree Requests
- Codeforces Round #316 (Div. 2) D. Tree Requests
- Codeforces Round #316 (Div. 2) D. Tree Requests (DFS序)
- Codeforces Round #329 (Div. 2) D. Happy Tree Party
- Codeforces Round #316 (Div. 2)D. Tree Requests
- Codeforces Round #316 (Div. 2) D. Tree Requests
- JAVA从菜鸟【入门】到新手【实习】一一Python学习习惯养成
- cmsplus实战之仿[我扫网]之二:仿站开发页面信息列表清单
- UVA 10970 Big Chocolate(水题)
- 第一篇
- cmsplus实战之仿[我扫网]之三:新建并配置仿站工程信息
- Codeforces Round #353 (Div. 2) D. Tree Construction (BST询问父亲节点)
- poj 3207 Panda's Trick(2-sat,建图)
- Build a Responsive UI with ConstraintLayout
- 杭电ACM1000题------java语言
- Linux学习之网络基础
- cmsplus实战之仿[我扫网]之四:安装整站下载器并下载仿站所有数据
- Linux文件与时间编程2
- UVa11997 K Smallest Sums 归并 + 优先队列
- 278. First Bad Version