描述

已知二叉排序树采用二叉链表存储结构,根结点的指针为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++,附思路及建立时的可能错误排查)相关推荐

  1. Excel函数之countifs函数(统计给定的多个条件下的数据)

    公式 其它函数 统计 countifs 第一个是年龄区域(客户资料),第二个是条件(年龄段),在一个是性别,性别条件(女) 确定 快捷键 写出第一个公式时 选中要求区域 alt+= 求对应值 进阶方法 ...

  2. 3001基于哈夫曼树的数据压缩算法(附思路及注释)

    写在最前:我的思路用到了stl的map,对组pair相关知识. 描述 输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码), ...

  3. 你的成绩取决于你最短的那一块木板?倾斜条件下容积的计算(附源码)

    有一个这样的著名理论,称之为木桶理论,大意是说: 一只水桶能装多少水取决于它最短的那块木板 .一只木桶想盛满水,必须每块木板都一样平齐且无破损,如果这只桶的木板中有一块不齐或者某块木板下面有破洞,这只 ...

  4. 物理隔离下的数据交换平台难点解析与实践(一)

    目录 第零章.前言:为什么?做什么?怎么做? 第一章.数据交换平台的一些基本概念 目录 第零章.前言:为什么?做什么?怎么做? 最近带队做了公司的一个项目,叫数据交换平台,旨在物理隔离的情况下对多端业 ...

  5. SQL语句结合后台处理大量数据下的数据导出

    需求是,在一个两三千万的日志表中,导出指定过滤条件下,有关的卡号日志信息,且日志信息按照卡号的顺序排序,同时卡号和产品ID相同时只取时间最大的那条. 刚拿到此需求时,写SQL语句直观的处理方式容易是: ...

  6. 下一个风口-基于数据湖架构下的数据治理

    前言 随着大数据.人工智能.云计算.物联网等数字化技术的普及和广泛应用,传统的数据仓库模式,在快速发展的企业面前已然显的力不从心.数据湖,是可以容纳大量的原始数据的存储库和处理系统,已经成为企业应用大 ...

  7. 跳过数据准备,下秒数据让飞书维格表

    随着业务场景的多元化发展,消费者需求的个性化,海量数据暴增.数字化时代,传统的生产工具已经无法跟上时代的步伐,传统办公软件也无法满足企业的多元化需求,能够提升业务效率的软件产品成了企业数智化转型的首选 ...

  8. 跳过数据准备,下秒数据让飞书维格表数据应用更高效

    跳过数据准备,下秒数据让飞书&维格表数据应用更高效 随着业务场景的多元化发展,消费者需求的个性化,海量数据暴增.数字化时代,传统的生产工具已经无法跟上时代的步伐,传统办公软件也无法满足企业的多 ...

  9. 阿里云发布vSphere虚拟机备份服务 ,网络带宽有限条件下依然能有效保护数据

    在6月上旬举行的云栖大会上海峰会上,阿里云发布了vSphere虚拟机备份上云服务(HBR for vSphere),并已经在7月份开始邀测.利用混合云备份服务可以将虚拟机镜像备份上云,避免了传统备份方 ...

最新文章

  1. c语言结构体共用体枚举实例程序,10-C语言结构体-共用体-枚举
  2. 数据中心节能专题—他山之石可以攻玉
  3. [Luogu1891]疯狂LCM[辗转相减法]
  4. [RabbitMQ]MQ 的选择
  5. prima evb_用Priam设置Cassandra
  6. nginx的upstream模块安装
  7. Linux搭建svn服务
  8. mysql join性能_Mysql Join语法解析与性能分析
  9. useradd: cannot open /etc/passwd解决办法记录
  10. 对比了 18000 个 Python 项目,这 TOP45 值得学习!
  11. java第一次实验总结与心得,最新整理
  12. js判断网页标题包含某字符串则替换
  13. java mail 不用密码_Java之道|Windows MySQL5.7忘记了密码,不要慌,不用重装!!!...
  14. Linux 下报错:A Java RunTime Environment (JRE) or Java
  15. css table布局大法,解决你大部分居中、多列等高、左右布局的问题
  16. 72. 少用 iframe
  17. 如何建语料库_语料库-如何建设语料?如何建设语料库 爱问知识人
  18. 微信公众号开发相关流程及功能介绍
  19. 树莓派 Ubuntu 18.04 启动2.4Ghz或5Ghz热点及部分5G信道启动失败解决方法
  20. 文件存储-CephFS

热门文章

  1. ironpython最新版本_Microsoft IronPython2.7.5 最新版
  2. Java基础---认识多态
  3. python接口自动化测试二十四:上传多个附件,参数化
  4. 现代软件工程_团队项目_阿尔法阶段_现有功能汇总_2018.01.04
  5. 网页设计中 透明效果的使用技巧
  6. 教你50招提升ASP.NET性能(二十六):对于开发人员的数据库性能技巧
  7. 安装和运行Maven
  8. [Linux] 如何让linux加载当前目录的动态库
  9. 在Vs.net中集成 NDoc生成的 Html Help 2帮助文档
  10. Mr.J--Java异常处理总结