查找二叉树(BST)
1、查找二叉树的定义
先上图:
一棵二叉搜索树(Binary Sort Tree)是以一棵二叉树来组织的,可以用链表数据结构来表示,其中,每一个结点就是一个对象,一般地,包含数据值和指向孩子(也可能是父母)的指针
。如果某个孩子结点不存在,其指针为空(NULL
)。
- 查找树的左右子树各是一棵查找树
- 若查找树的左子树非空,则其左子树上的各节点值均小于根节点的值。
- 若查找树的右子树非空,则其右子树上的各节点值均大于根节点的值。
2、查找树的基本操作
- 查找
- 插入节点
- 删除节点
2.1 查找
二叉搜索树很多时候用来进行数据查找。这个过程从树的根结点开始,沿着一条简单路径一直向下,直到找到数据或者无法找到返回NULL
值。从图中可以看出,在查找二叉树中查找很容易,比大小就可以,小就向左找,大就向右找。
例如说,查找12。
步骤:
- 12<16,向左找,与9去比较
- 12>9,向右找,与12去比较
- 12=12,找到了
2.2 插入
在查找树中插入一个节点需要分情况:
- 如果相同键值的节点已经存在,则不再插入
- 如果查找树为空,则已新节点为查找树
- 将要插入节点的键值与插入后的父节点的键值比较,就能确定新节点是父节点的左子节点,还是右子节点。
2.3 删除
在查找树中删除一个节点需要分情况:
- 若待删除的节点是叶子节点,则直接删除该节点
- 若待删除的节点只有一个子节点,则将待删除节点父节点与其子节点直接相连,然后删除该节点
- 若待删除的节点有两个子节点,则在其左子树上,用中序遍历寻找值最大节点s,用节点s的值代替该节点的值,然后删除节点s,且节点s必属上述两种情况之一
例题1:
利用逐点插入法建立序列(50,72,43,85,75,20,35,45,65,30)对应的二叉排序树以后,查找元素30要进行__次元素间的比较
A. 4
B. 5
C. 6
D. 7
插入是指把每个节点都看成查找树,因此可以画出:
例题2:
在常用的描述二叉排序树的存储结构中,关键字值最大的节点__。
A. 左指针一定为空
B. 右指针一定为空
C. 左、右指针均为空
D. 左右指针均不为空
查找二叉树(BST)相关推荐
- C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划
C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...
- 【算法与数据结构】查找二叉树的实现
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.题目介绍 二叉树是一种基本的数据结构.查找二叉树是一种方便与查找,删除,插入等功能的二叉树,它要求每 ...
- 查找二叉树(信息学奥赛一本通-T1367)
[题目描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点.例:如图二叉树的数据文件的数据格式如下: [输入] 第一行n为二叉树的结点个树,n≤100:第二行x表示 ...
- 算法不会,尚能饭否之对分查找二叉树(又为快速排序之二叉树实现)
快速排序,可以以数组的形式实现,也可以用二叉树的形式实现,而我的这篇博文,正好 讲的是用二叉树的形式实现的.这种二叉树,又叫对分查找二叉树,在实际的应用中是不胜枚 举的.废话少说,代码贴上,算法比较简 ...
- 华为OD机试用Python实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q1 新题)
华为OD机试题 华为OD机试300题大纲 查找树中的元素 or 查找二叉树节点 题目描述 输入描述 输出描述 说明 示例一 输入 输出 示例二 输入 输出 Python 代码实现 代码编写思路 华为O ...
- 信息学奥赛一本通 1367:查找二叉树(tree_a)
[题目链接] ybt 1367:查找二叉树(tree_a) 可以默认各结点的值是不同的. [题目考点] 1. 二叉树 中序遍历 [解题思路] 中序遍历的同时做计数,判断当前遍历到的结点的值是不是x,如 ...
- 1367:查找二叉树(tree_a)
http://ybt.ssoier.cn:8088/problem_show.php?pid=1367 [题目描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点. ...
- 1367:查找二叉树
[题目描述] 已知一棵二叉树用邻接表结构存储,中序查找二叉树中值为x的结点,并指出是第几个结点.例:如图二叉树的数据文件的数据格式如下: [输入] 第一行n为二叉树的结点个树,n<=100:第二 ...
- 1367 查找二叉树(tree_a)
1367:查找二叉树(tree_a) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3778 通过数: 2326 [题目描述] 已知一棵二叉树用邻接表结构 ...
最新文章
- 学习编写Unity计算着色器 Learn to Write Unity Compute Shaders
- linux tf命令,Linux系统命令介绍之vmstat命令详解
- XCode 7上传遇到ERROR ITMS-90535 Unexpected
- cppcheck编译安装命令
- arcgis导出shp文件_地理工具学习--arcgis篇(15):CAD和SHP的简单转换
- jqgrid学习(三)
- (一)Neo4j在Centos7虚拟机上的安装
- Android中常见的MVC/MVP/MVVM模式
- Android 兼容 Java 8 语法特性的原理分析
- 拖延症讲:反向遍历链表
- 带有示例的Python File readline()方法
- 抓取网页代码php,PHP抓取网页代码示例
- 软件盘将dialog顶上去_Android dialog软键盘弹出顶起View
- 联发科5G芯片发布:7nm,4.7 Gbps下载速度,独立AI架构
- Spring发布WebService并调用已有的WebService
- ubuntu更改ip地址 网官 dns,使ubuntu的ip地址每次启动都是固定
- Android系统关于音量相关的控制-初识
- Altium Designer 18 导入网络报表到PCB 文件中
- 经典网络结构分析:卷积神经网络的现代雏形 ---LeNet
- 星起航:在内容为王的时代电商拥抱短视频势不可挡
热门文章
- Qt中sender()函数的用法
- matlab中设置数据长度,excel表格长宽设置/如何检查excel单元格内数字长度
- XML报表打印出错,乱码问题
- WslRegisterDistribution failed with error: 0x80370102 Error: 0x80370102 ???????????????????
- 分享这13个宝藏素材网站给大家,昨天剪辑10个视频挣了800多
- C专家编程读书笔记一:C语言晦涩难懂的声明
- n719 rom 卡刷 android 4.3,三星 N719官方4.3纯净版ROM刷机(线刷)获取ROOT权限
- Portainer添加远程Docker(Docker API)
- neutron理解总结(一)
- 10个深度学习的工具