
二叉排序树有序二叉树 / BST... 1一、基本概念... 1二、节点结构Java 通用定义... 3三、二叉排序树五大核心操作... 31. 插入节点构建 BST 最基础操作... 32. 查找节点... 53.广度优先遍历... 64.深度优先遍历... 8—先序遍历... 8--中序遍历... 10—后序遍历... 115. 删除节点最难重点分 3 种情况... 12情况 1待删节点是叶子节点无左、无右孩子... 12情况 2待删节点只有单侧子树只有左孩子 / 只有右孩子... 14情况 3待删节点左右子树都存在最难... 166. 获取最小值 / 最大值... 18四、优缺点... 19二叉排序树有序二叉树 / BST一、基本概念二叉排序树全称二叉搜索树 Binary Search Tree简称 BST满足三大规则核心判定条件若左子树不为空左子树上所有节点的值 根节点值若右子树不为空右子树上所有节点的值 根节点值左右子树各自也必须是二叉排序树递归满足规则✅ 重要特性对二叉排序树进行中序遍历左→根→右遍历结果一定是升序有序数组这也是它叫有序二叉树的原因。示例5030 7020 40 60 80中序遍历20,30,40,50,60,70,80从小到大排列二、节点结构Java 通用定义二叉树每个节点包含数据域、左孩子指针、右孩子指针三、二叉排序树五大核心操作1. 插入节点构建 BST 最基础操作插入规则树为空新节点直接作为根节点待插入值 当前节点值去左子树递归插入待插入值 当前节点值去右子树递归插入相等值一般规定 BST 不允许存放重复元素直接舍弃运行2. 查找节点查找逻辑根为空 → 查找失败目标值 当前节点值 → 找到返回当前节点目标值 当前节点 → 往左找目标值 当前节点 → 往右找3.广度优先遍历规则从上至下逐层遍历每层从左到右核心逻辑借助队列先进先出根节点入队出队时它的左右节点入队1. 根节点入队2. 循环队列不为空- 队首节点出队访问数值- 左孩子不为空 → 入队- 右孩子不为空 → 入队4.深度优先遍历—先序遍历先序遍历根 → 左 → 右--中序遍历中序遍历左 → 根 → 右遍历结果永久升序排列—后序遍历后序遍历左 → 右 → 根5. 删除节点最难重点分 3 种情况情况 1待删节点是叶子节点无左、无右孩子1.找到目标节点 target2.找到目标节点的父节点parent 没有父节点rootnull有父节点直接将父节点指向该节点的引用置为 null 即可。情况 2待删节点只有单侧子树只有左孩子 / 只有右孩子1.找到目标节点 target2.找到目标节点的父节点parent 没有父节点判断目标节点是有左子树还是右子树roottarget.left或roottarget.right用它唯一的子节点顶替自己的位置即可。有父节点则情况 3待删节点左右子树都存在最难两种替换方案任选其一取左子树最大值左子树最右节点 替换被删节点取右子树最小值右子树最左节点 替换被删节点原理左最大、右最小的数字放到当前位置依旧满足 BST 规则6. 获取最小值 / 最大值最小值一路向左遍历到底最左下角节点最大值一路向右遍历到底最右下角节点// 找最小值public Node getMin(Node root) {while(root.left ! null) root root.left;return root;}// 找最大值public Node getMax(Node root) {while(root.right ! null) root root.right;return root;}四、优缺点✅ 优点查找效率远超顺序数组插入删除比有序数组方便中序遍历天然有序❌ 缺点极端情况退化成链表效率暴跌无法随机访问元素不像数组可以按下标取值