目录

  • 搜索树的概念
  • 查找操作
  • 插入操作
  • 删除操作
  • 改的操作

搜索树的概念

二叉搜索树又被称为排序树,它或者是一颗空树,或者是一棵具有以下性质的二叉树:

  1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  2. 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
  3. 它的左右子树也分别为二叉搜索树
    下图就是一棵二叉搜索树,可以对应上面性质加深理解:

查找操作

实现思想:

实现代码:

// O(树的高度)public boolean find(int key) {Node current = root;while (current != null) {if (key == current.key) {return true;} else if (key < current.key) {current = current.left;} else {current = current.right;}}return false;}

插入操作

实现思想:

  1. 如果树为空树,即根 == null,直接插入
  2. 如果不时空树,按照查找逻辑确定插入位置,插入新节点,这里需要引入两个变量

实现代码:

// O(树的高度)public void insert(int key) {if (root == null) {root = new Node(key);return;}Node parent = null;Node current = root;while (current != null) {if (key == current.key) {throw new RuntimeException("BST 中不允许重复的 key: " + key);} else if (key < current.key) {parent = current;current = current.left;} else {parent = current;current = current.right;}}// 1. 把关键字装入结点中Node node = new Node(key);if (key < parent.key) {parent.left = node;} else {parent.right = node;}}

删除操作

设待删除节点为cur,待删除节点的双亲节点为parent
有以下三种情况:


实现代码:

  // O(树的高度)public boolean remove(int key) {Node parent = null;Node current = root;while (current != null) {if (key == current.key) {// 删除 current 中的 keyremoveNode(parent, current);return true;} else if (key < current.key) {parent = current;current = current.left;} else {parent = current;current = current.right;}}return false;}// O(1)private void removeNode(Node parent, Node current) {if (current.left == null) {if (current == root) {root = current.right;} else if (current == parent.left) {parent.left = current.right;} else {parent.right = current.right;}} else if (current.right == null) {if (current == root) {root = current.left;} else if (current == parent.left) {parent.left = current.left;} else {parent.right = current.left;}} else {Node goat = current.right;Node goatParent = current;while (goat.left != null) {goatParent = goat;goat = goat.left;}// 替换current.key = goat.key;// 删除 goat 结点if (goatParent == current) {goatParent.right = goat.right;} else {goatParent.left = goat.right;}}}

改的操作

改的操作和查一模一样,只不过在找到目标节点之后修改它的数值即可。

二叉搜索树的思想,以及增删查改的实现相关推荐

  1. 数据库基础操作(二)数据库表数据的增删查改

    一.插入数据 insert 向表中制定字段添加数据:insert into 表 (字段名1,字段名2......) values(值1,值2......); 向表中所有字段添加数据:insert in ...

  2. 请回答数据结构【二叉搜索树】

    请回答数据结构[二叉搜索树] 1. BinarySearchTree(二叉排序树) 1.0 Intro 1.1 concept 2. 二叉搜索树快速入门 2.1 查找 2.2 BSTree应用 3. ...

  3. 二叉搜索树,和红黑树,

    二叉搜索树 class node():def __init__(self,a):self.val=aself.left=Noneself.right=None #当函数写起来复杂时候,考虑给函数加变量 ...

  4. gremlin_python使用及增删查改方法封装

    文章目录 一.安装Janusgraph 二.连接gremlin 三.增删查改方法封装 四.其他方法封装 五.致谢 一.安装Janusgraph 1.下载安装包 前往janusgraph的官方发布页下载 ...

  5. 数据结构:二叉搜索树的增删查改

    二叉搜索树的增删查改 二叉搜索树(Binary Search Tree) 基本操作之查找(Update) 基本操作之修改(Update) 基本操作之增加(Create) 基本操作之删除(Delete) ...

  6. [Leetcode][第98 450 700 701题][JAVA][二叉搜索树的合法性、增、删、查][递归][深度遍历]

    [二叉搜索树定义](BST) 二叉搜索树(Binary Search Tree,简称 BST)是一种很常用的的二叉树.它的定义是:一个二叉树中,任意节点的值要大于等于左子树所有节点的值,且要小于等于右 ...

  7. 详解二叉搜索树的增删改查

    文章目录 二叉搜索树 1.1 定义 二.二叉搜索树基本结构 三.二叉搜索树的具体实现 3.1 插入节点 3.2 查询节点 3.3 删除节点(⭐️) 3.4 二叉搜索树的遍历 四.二叉搜索树的性能分析和 ...

  8. 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树

    概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...

  9. 二叉搜索树+快速排序 查到文本中出现频率最多的100个词 【留学生作业】

    完整工程 https://download.csdn.net/download/renzemingcsdn/21378979 需求 在这个作业中,你将从一个大文本文件中找到100个最经常出现的单词.程 ...

最新文章

  1. IT人的自我导向型学习:开篇杂谈
  2. 完美的素数_JAVA
  3. 二十年后我发明了保姆机器人作文_我想发明保姆机器人作文700字
  4. NSFetchedResultsController和UITableView显示CoreData的数据时用relationship分组的方法
  5. 安装MySQL-python报错 error: command 'gcc' failed with exit status 1解决方法
  6. clientHeight,offsetHeight,scrollHeight迷一样的三个值
  7. A轮股权学院:激活股权的力量,弄懂这些就够了
  8. 全方面的了解超宽带信号高速采集记录回放系统
  9. VMware vSAN的相关告警处理 2021-01-04
  10. 解读千人千面,洞悉数据智能的价值(附ppt下载链接)
  11. 用原生javascript做的一个打地鼠的小游戏
  12. 数论及Python实践
  13. VMware网络连接方式(Host-only、NAT、Bridged)介绍及NAT环境下静态IP配置
  14. spring cloud gateway 拦截request Body
  15. AtCoder Regular Contest 102 (ARC102) E - Stop. Otherwise... 排列组合
  16. 地铁关门提示音,可使用倒计时
  17. Android ViewHolder的理解
  18. machine learning measurements
  19. NAR:MicrobiomeAnalyst微生物组分析师——统计、可视化和元分析微生物组数据的网页工具
  20. NodeJS解析前端请求图片链接,将服务器目录下的图片返回给前端用于页面展示

热门文章

  1. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...
  2. 多对多的添加修改,显示,的逻辑步骤
  3. SSIS hang with unhandle exception
  4. ES6学习笔记(四):教你轻松搞懂ES6的新增语法
  5. react-组件状态机制(五)
  6. jQueyr源码分析学习笔记(四)
  7. C++全局变量的声明和定义
  8. vue 悬浮按钮组件_如何搭建和发布一个 Vue 组件库
  9. 第1关:HDFS的基本操作
  10. R7-2 统计字符[2] (10 分)