当前位置: 首页 > news >正文

AcWing 3595:二叉排序树 ← BST

【题目来源】
https://www.acwing.com/problem/content/3598/

【题目描述】
二叉排序树,也称为二叉查找树。
可以是一颗空树,也可以是一颗具有如下特性的非空二叉树:

1.若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;
2.若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;
3.左、右子树本身也是一颗二叉排序树。

现在给你 N 个关键字值各不相同的节点。
要求你将这些节点按顺序插入一个初始为空树的二叉排序树中。
每次成功插入一个节点后,求其相应的父亲节点的关键字值,如果没有父亲节点,则输出 −1。

【输入格式】
第一行包含整数 N,表示待插入的节点数。
第二行包含 N 个互不相同的正整数,表示要顺序插入节点的关键字值。

【输出格式】
N 行。

【输入样例】
5
2 5 1 3 4

【输出样例】
-1
2
2
5
3

【数据范围】
1≤N≤100,
节点
关键字值取值范围 [1,10^8]。​​​​​​​

【算法分析】
● 题目中 N 的数据范围为 1≤N≤100,但若依据经验设 maxn=105,那么算法代码二运行后,必然会出现段错误(
Segmentation Fault)。这是因为在极端情况下,二叉排序树会退化成单支树。此时,若使用数组表示 N 个节点的单支树时,节点最大索引可能达到 2^N-1。显然,2^100-1 超出了数组的合理范围。
● 算法代码一中的 
std::unordered_map::count(k) → 1 if an element with a key equivalent to k is found, or zero otherwise.
https://cplusplus.com/reference/unordered_map/unordered_map/count/

【算法代码一】

#include<bits/stdc++.h>
using namespace std;unordered_map<int,int> le,ri;int dfs(int &rt, int x) {if(rt==-1) {rt=x;return -1;}int fa=rt;if(x>fa) {if(!ri.count(fa)) {ri[fa]=x;return fa;} else return dfs(ri[fa],x);}if(x<fa) {if(!le.count(fa)) {le[fa]=x;return fa;} else return dfs(le[fa],x);}
}int main() {int root=-1;int n;cin>>n;while(n--) {int x;cin>>x;cout<<dfs(root,x)<<endl;}return 0;
}/*
in:
5
2 5 1 3 4out:
-1
2
2
5
3
*/


【算法代码二】
段错误(
Segmentation Fault)代码。
但在数据量小的前提下,此代码是正确的,且足以理解朴素的 BST 算法思想。

#include<bits/stdc++.h>
using namespace std;const int maxn=1e3+5;
int tr[maxn];int main() {int n,x;cin>>n;for(int i=1; i<=n; i++) {cin>>x;if(i==1) {tr[1]=x;cout<<-1<<endl;continue;}int pos=1,fa=-1;while(1) {if(tr[pos]==0) {tr[pos]=x;cout<<fa<<endl;break;}fa=tr[pos];if(x>tr[pos]) pos=pos*2+1;else pos=pos*2;}}return 0;
}/*
in:
5
2 5 1 3 4out:
-1
2
2
5
3
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/120397275
https://blog.csdn.net/hnjzsyjyj/article/details/140231285
https://www.acwing.com/problem/content/1630/
https://www.cnblogs.com/crazyapple/archive/2013/05/14/3077382.html
https://www.acwing.com/solution/content/219723/






 

http://www.dtcms.com/a/610594.html

相关文章:

  • Linux内核资源管理机制深度剖析:从IO端口申请到释放的完整生命周期
  • 网站主机是什么意思公网怎么做网站
  • 内存结构/运行时数据区
  • ls、cd等命令均无法使用的问题解决
  • c语言编译器教学 | 深入理解C语言编译器原理与使用技巧
  • 网站开发教案深圳网站建设公司大全
  • 怎么降低网站的跳出率设置wordpress数据库用户名
  • 对基因列表中批量的基因进行GO和KEGG注释
  • 关于网站建设项目创业计划书广告软文案例
  • 代备案网站新手建站论坛
  • 宝塔FTP的进阶应用——通过cpolar内网穿透实现远程文件协同管理
  • C# 中使用 Influxdb 1.x(三)
  • 【第1章·第4节】逻辑阵列操作与应用举例
  • 百度网站下拉排名网站线上运营
  • 西宁网站制作多少钱什么是电商行业
  • 蓝光3D扫描仪在汽车模具质量控制中的应用:提升金属与注塑模具的尺寸检测效率
  • 免费自建商城网站楼盘推荐排行榜
  • VCU上下电流程学习(二)
  • 课程网站建设的目的意义做自己的网站怎么赚钱
  • Ts基础(一)—— 类型
  • ASC学习笔记0010:效果被应用时的委托
  • 深圳深圳建设网站wordpress网盘主题
  • 北京齐力众信网站建设自己怎么制作网站
  • 想找一家公司设计网站wordpress链接设置方法
  • LeetCode 424 - 替换后的最长重复字符
  • 数据结构--9:反射、枚举以及lambda表达式(了解即可)
  • Chartjs画二氧化碳浓度曲线
  • ts语法ts语法ts语法
  • 网站打开慢原因wordpress多站点 用户同步
  • 游戏被IP限制多开,如何在同一网络下用不同IP多开游戏?