4017-二叉排序树的限定条件下的数据输出(C++,附思路及建立时的可能错误排查)
描述
已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild、rchild分别指向该结点左,右孩子的指针,data域存放结点数据。试编写算法,从小到大输出二叉排序树中所有数值大于等于x的结点的数据。要求先找到第一个满足条件的结点后,再依次输出其他满足条件的结点(我对这句话存在的必要性存疑,感觉是废话,还有误导性)。
输入
多组数据,每组三行。第一行为二叉排序树的结点数n。第二行为空格分隔的n个数字,对应二叉排序树中的n个结点。第三行为一个数字x。n=0时输入结束。
输出
每组数据输出一行。从小到大输出大于等于x的结点数据。每个数据用空格分隔。
输入样例 1
5
1 5 3 2 4
3
9
1 30 2 15 6 7 3 9 233
30
0
输出样例 1
3 4 5 30 233
思路:
题里这句:要求先找到第一个满足条件的结点后,再依次输出其他满足条件的结点
感觉对输出完全没用(实际上确实没用),找到了又怎样呢,还不是按大小顺序输出……凭空来一句这句话反而会让人产生困惑。
这道题主要的的考察点在于二叉排序树的建立,遍历是小的考点。
二叉排序树的建立就是将每次输入的数据与当前节点的data值相比较,如果比它小的话,就建立在它的左子节点,否则建立在右子节点,就这么简单~
但是注意:main函数里的BTree bt如果在初始化的时候不写bt=NULL,它会指向一片未知的内存空间,这块内存空间不是NULL,但是同样不可访问(不能修改里面的值!!),所以在建立的时候就会出问题,不满足(!bt)的条件,可是一旦要修改data值就会报错,原因就在这里。
在遍历树的时候,采用一个全局数组vector<int> v来存储符合要求的数,最后输出之前先sort一下再输出即可~
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<stack>
#include<set>
#include<map>
using namespace std;vector<int> v;
typedef struct BNode
{int data;struct BNode* lchild, * rchild;
}*BTree, BNode;
void Create(BTree& bt,int x)
{if (!bt){bt = new BNode;bt->data = x;bt->lchild = NULL;bt->rchild = NULL;}else{if (x < bt->data)Create(bt->lchild, x);elseCreate(bt->rchild, x);}
}
void Traverse(BTree bt,int x)
{if (bt){if (bt->data >= x)v.push_back(bt->data);Traverse(bt->lchild, x);Traverse(bt->rchild, x);}
}
void Print()
{sort(v.begin(), v.end());for (int i = 0; i < v.size()-1; i++)cout << v[i]<<' ';cout <<v[v.size()-1]<< endl;
}
int main()
{int n;while (cin >> n && n != 0){BTree bt=NULL;int x;for (int i = 0; i < n; i++){cin >> x;Create(bt, x);} cin >> x;Traverse(bt,x);Print();v.clear();}return 0;
}
4017-二叉排序树的限定条件下的数据输出(C++,附思路及建立时的可能错误排查)相关推荐
- Excel函数之countifs函数(统计给定的多个条件下的数据)
公式 其它函数 统计 countifs 第一个是年龄区域(客户资料),第二个是条件(年龄段),在一个是性别,性别条件(女) 确定 快捷键 写出第一个公式时 选中要求区域 alt+= 求对应值 进阶方法 ...
- 3001基于哈夫曼树的数据压缩算法(附思路及注释)
写在最前:我的思路用到了stl的map,对组pair相关知识. 描述 输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码), ...
- 你的成绩取决于你最短的那一块木板?倾斜条件下容积的计算(附源码)
有一个这样的著名理论,称之为木桶理论,大意是说: 一只水桶能装多少水取决于它最短的那块木板 .一只木桶想盛满水,必须每块木板都一样平齐且无破损,如果这只桶的木板中有一块不齐或者某块木板下面有破洞,这只 ...
- 物理隔离下的数据交换平台难点解析与实践(一)
目录 第零章.前言:为什么?做什么?怎么做? 第一章.数据交换平台的一些基本概念 目录 第零章.前言:为什么?做什么?怎么做? 最近带队做了公司的一个项目,叫数据交换平台,旨在物理隔离的情况下对多端业 ...
- SQL语句结合后台处理大量数据下的数据导出
需求是,在一个两三千万的日志表中,导出指定过滤条件下,有关的卡号日志信息,且日志信息按照卡号的顺序排序,同时卡号和产品ID相同时只取时间最大的那条. 刚拿到此需求时,写SQL语句直观的处理方式容易是: ...
- 下一个风口-基于数据湖架构下的数据治理
前言 随着大数据.人工智能.云计算.物联网等数字化技术的普及和广泛应用,传统的数据仓库模式,在快速发展的企业面前已然显的力不从心.数据湖,是可以容纳大量的原始数据的存储库和处理系统,已经成为企业应用大 ...
- 跳过数据准备,下秒数据让飞书维格表
随着业务场景的多元化发展,消费者需求的个性化,海量数据暴增.数字化时代,传统的生产工具已经无法跟上时代的步伐,传统办公软件也无法满足企业的多元化需求,能够提升业务效率的软件产品成了企业数智化转型的首选 ...
- 跳过数据准备,下秒数据让飞书维格表数据应用更高效
跳过数据准备,下秒数据让飞书&维格表数据应用更高效 随着业务场景的多元化发展,消费者需求的个性化,海量数据暴增.数字化时代,传统的生产工具已经无法跟上时代的步伐,传统办公软件也无法满足企业的多 ...
- 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据
在6月上旬举行的云栖大会上海峰会上,阿里云发布了vSphere虚拟机备份上云服务(HBR for vSphere),并已经在7月份开始邀测.利用混合云备份服务可以将虚拟机镜像备份上云,避免了传统备份方 ...
最新文章
- c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举
- 数据中心节能专题—他山之石可以攻玉
- [Luogu1891]疯狂LCM[辗转相减法]
- [RabbitMQ]MQ 的选择
- prima evb_用Priam设置Cassandra
- nginx的upstream模块安装
- Linux搭建svn服务
- mysql join性能_Mysql Join语法解析与性能分析
- useradd: cannot open /etc/passwd解决办法记录
- 对比了 18000 个 Python 项目,这 TOP45 值得学习!
- java第一次实验总结与心得,最新整理
- js判断网页标题包含某字符串则替换
- java mail 不用密码_Java之道|Windows MySQL5.7忘记了密码,不要慌,不用重装!!!...
- Linux 下报错:A Java RunTime Environment (JRE) or Java
- css table布局大法,解决你大部分居中、多列等高、左右布局的问题
- 72. 少用 iframe
- 如何建语料库_语料库-如何建设语料?如何建设语料库 爱问知识人
- 微信公众号开发相关流程及功能介绍
- 树莓派 Ubuntu 18.04 启动2.4Ghz或5Ghz热点及部分5G信道启动失败解决方法
- 文件存储-CephFS
热门文章
- ironpython最新版本_Microsoft IronPython2.7.5 最新版
- Java基础---认识多态
- python接口自动化测试二十四:上传多个附件,参数化
- 现代软件工程_团队项目_阿尔法阶段_现有功能汇总_2018.01.04
- 网页设计中 透明效果的使用技巧
- 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧
- 安装和运行Maven
- [Linux] 如何让linux加载当前目录的动态库
- 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
- Mr.J--Java异常处理总结