DS二叉排序树之查找
题目描述
给出一个数据序列,建立二叉排序树,并实现查找功能
对二叉排序树进行中序遍历,可以得到有序的数据序列
输入
第一行输入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二叉排序树之查找相关推荐
- Re:从零开始的DS学习之查找算法
Re:从零开始的DS学习 考研专业课满分大佬是怎么学习查找算法的,本文从顺序查找->二分查找>hash查找->BST树->优先队列->堆,帮你打开查找算法的新世纪,深入浅 ...
- 数据结构(8-3)二叉排序树(查找、插入删除)
目录 一.基础理论 1.特点: 2.结构: 二.查找 三.插入 四.删除 1.被删除的结点D是叶子结点 2.被删除的结点D仅有一个孩子 2-1.删除结点14(有左无右) 2-2.删除结点 10 (有右 ...
- java二叉排序树动态查找表_9.3.1动态查找表—二叉排序树
一.二叉排序树定义 二叉排序树(Binary Sort Tree)或者是一棵空树:或者是具有下列性质的二叉树: 我们知道一颗基本的二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节 ...
- 【大话数据结构C语言】56 二叉排序树的查找、插入和删除
欢迎关注我的公众号是[CodeAllen],关注回复[1024]获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 目录 二叉排序树查找关键字 二叉排序 ...
- 二叉排序树中查找效率最高的是
二叉排序树中查找效率最高的是平衡二叉树 二叉查找数的查找速度取决于树的深度 相同节点数深度最小的是平衡二叉树
- 数据结构二叉排序树的查找
1.二叉排序树的查找 (1)非递归方式(最坏空间复杂度O(1)) typedef struct BSTNode{int key;struct BSTNode *lchild, *rchild; }BS ...
- 数据结构之算法(二叉排序树的查找分析)
在二叉排序树上查找其关键字等于给定值的结点的过程,恰是走了一条从根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加1(或结点所在层次数),因此,和折半查找类似,与给定值比较的关键字个数 ...
- 重温数据结构:二叉排序树的查找、插入、删除
读完本文你将了解到: 什么是二叉排序树 Binary Sort Tree, BST 二叉排序树的关键操作 1.查找 2.插入 3.删除 * 运行代码测试 一道面试题 总结 Thanks 我们知道,二分 ...
- 二叉排序树的查找、插入
下面是查找代码: // 二叉树的二叉链表结点结构定义 typedef struct BiTNode {int data;struct BiTNode *lchild, *rchild; }BiTNod ...
最新文章
- 桌面虚拟化之远程协助
- OCtaveResNet 测试
- 高级工程师职英语计算机,高级工程师要考英语吗
- android php mysql json 查询_使用json从PHP-MySql服务器到Android获取图像
- 如果觉得午休时间太短怎么办?
- CBT的完整形式是什么?
- 对软件工程实践课程的预定目标
- matlab dynprog,动态规划算法
- Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解决办法
- 特征选择 ReliefF算法
- linux清指令,Linux隐匿和清除的几条命令
- 坐火车卧铺,到底是上、中、下哪个好?其实简单对比一下就知道了
- Java接口和Java抽象类(转,原文已被删除)
- c# forbidden.html,C#Web API方法返回403 Forbidden
- linux免安装mysql_linux上免安装版MySQL5.7.18的教程详解
- 我的单车游记:向西,向西,到栖霞去(一)
- 无序列表将点替换成图片
- javascript高级编程教程,javascript基础入门案例
- 【正点原子FPGA连载】第三十一章RTC实时时钟数码管显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
- 【嵌入式学习】嵌入式开发的第一课