题目描述

给出一个数据序列,建立二叉排序树,并实现查找功能

对二叉排序树进行中序遍历,可以得到有序的数据序列

输入

第一行输入t,表示有t个数据序列

第二行输入n,表示首个序列包含n个数据

第三行输入n个数据,都是自然数且互不相同,数据之间用空格隔开

第四行输入m,表示要查找m个数据

从第五行起,输入m行,每行一个要查找的数据,都是自然数

以此类推输入下一个示例

输出

第一行输出有序的数据序列,对二叉排序树进行中序遍历可以得到

从第二行起,输出查找结果,如果查找成功输出查找次数,如果查找失败输出-1

以此类推输出下一个示例的结果

输入样例1

1
6
22 33 55 66 11 44
7
11
22
33
44
55
66
77

输出样例1

11 22 33 44 55 66 
2
1
2
4
3
4
-1

NOTICE:

二叉排序树的查找:根据待查元素的大小走这棵树,若当前结点的值等于待查元素的大小,查找成功,若走到了空指针,说明查找失败;

#include <iostream>
using namespace std;class BiTreeNode
{
private:int data;BiTreeNode* lchild;BiTreeNode* rchild;
public:BiTreeNode(int a){data = a;lchild = nullptr;rchild = nullptr;}friend class BiTree;
};class BiTree
{
private:BiTreeNode* root;void inorder(BiTreeNode* t){if (t){inorder(t->lchild);cout << t->data << " ";inorder(t->rchild);}}
public:BiTree() :root(nullptr) {}void insert(int num){BiTreeNode* t = new BiTreeNode(num);if (root == nullptr){root = t;}else{BiTreeNode* p = root;BiTreeNode* q = nullptr;//指向p节点的双亲while (1){if (p == nullptr){if (num < q->data){q->lchild = t;}else if (num > q->data){q->rchild = t;}break;}if (num < p->data){q = p;p = p->lchild;}else if (num > p->data){q = p;p = p->rchild;}}}}void search(int num){BiTreeNode* p = root;int count = 0;while (1){count++;if (p == nullptr)//没找到{cout << "-1" << endl;break;}if (p->data == num)//找到{cout << count << endl;break;}if (num < p->data){p = p->lchild;}else if (num > p->data){p = p->rchild;}}}void inorder(){inorder(root);cout << endl;}
};int main()
{int t;cin >> t;while (t--){int n, m;BiTree tree;//创建二叉树(本质是多次插入)cin >> n;for (int i = 0; i < n; i++){int num;cin >> num;tree.insert(num);}tree.inorder();//查找cin >> m;for (int i = 0; i < m; i++){int num;cin >> num;tree.search(num);}}return 0;
}

DS二叉排序树之查找相关推荐

  1. Re:从零开始的DS学习之查找算法

    Re:从零开始的DS学习 考研专业课满分大佬是怎么学习查找算法的,本文从顺序查找->二分查找>hash查找->BST树->优先队列->堆,帮你打开查找算法的新世纪,深入浅 ...

  2. 数据结构(8-3)二叉排序树(查找、插入删除)

    目录 一.基础理论 1.特点: 2.结构: 二.查找 三.插入 四.删除 1.被删除的结点D是叶子结点 2.被删除的结点D仅有一个孩子 2-1.删除结点14(有左无右) 2-2.删除结点 10 (有右 ...

  3. java二叉排序树动态查找表_9.3.1动态查找表—二叉排序树

    一.二叉排序树定义 二叉排序树(Binary Sort Tree)或者是一棵空树:或者是具有下列性质的二叉树: 我们知道一颗基本的二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节 ...

  4. 【大话数据结构C语言】56 二叉排序树的查找、插入和删除

    欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 目录 二叉排序树查找关键字 二叉排序 ...

  5. 二叉排序树中查找效率最高的是

    二叉排序树中查找效率最高的是平衡二叉树 二叉查找数的查找速度取决于树的深度 相同节点数深度最小的是平衡二叉树

  6. 数据结构二叉排序树的查找

    1.二叉排序树的查找 (1)非递归方式(最坏空间复杂度O(1)) typedef struct BSTNode{int key;struct BSTNode *lchild, *rchild; }BS ...

  7. 数据结构之算法(二叉排序树的查找分析)

    在二叉排序树上查找其关键字等于给定值的结点的过程,恰是走了一条从根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加1(或结点所在层次数),因此,和折半查找类似,与给定值比较的关键字个数 ...

  8. 重温数据结构:二叉排序树的查找、插入、删除

    读完本文你将了解到: 什么是二叉排序树 Binary Sort Tree, BST 二叉排序树的关键操作 1.查找 2.插入 3.删除 * 运行代码测试 一道面试题 总结 Thanks 我们知道,二分 ...

  9. 二叉排序树的查找、插入

    下面是查找代码: // 二叉树的二叉链表结点结构定义 typedef struct BiTNode {int data;struct BiTNode *lchild, *rchild; }BiTNod ...

最新文章

  1. 桌面虚拟化之远程协助
  2. OCtaveResNet 测试
  3. 高级工程师职英语计算机,高级工程师要考英语吗
  4. android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
  5. 如果觉得午休时间太短怎么办?
  6. CBT的完整形式是什么?
  7. 对软件工程实践课程的预定目标
  8. matlab dynprog,动态规划算法
  9. Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解决办法
  10. 特征选择 ReliefF算法
  11. linux清指令,Linux隐匿和清除的几条命令
  12. 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了
  13. Java接口和Java抽象类(转,原文已被删除)
  14. c# forbidden.html,C#Web API方法返回403 Forbidden
  15. linux免安装mysql_linux上免安装版MySQL5.7.18的教程详解
  16. 我的单车游记:向西,向西,到栖霞去(一)
  17. 无序列表将点替换成图片
  18. javascript高级编程教程,javascript基础入门案例
  19. 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  20. 【嵌入式学习】嵌入式开发的第一课

热门文章

  1. Typora + 七牛云图床快速配置,告别手动上传图片!
  2. 一款颠覆认知的商务邮箱,即将成为职场人手必备的产品!
  3. Java 图形化界面设计(GUI)实战练习(代码)
  4. 位与、位或、异或、位移运算
  5. Markdown如何定义公式编号,以及引用编号
  6. 数据库分层数据现实方法
  7. 3、大话设计模式--浅谈基础
  8. JavaScript Getter 和 Setter
  9. 高数_证明_多元函数极值的充分条件
  10. APIJSON使用场景以及其他说明