news 2025/12/28 13:33:10

数据结构之二分搜索树 Binary Search Tree

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构之二分搜索树 Binary Search Tree

二分搜索树(BST)是一种有序的二叉树,也是数据结构中最常用的树形结构之一,其核心特性是 “左小右大”,这使得它的查找、插入、删除操作的平均时间复杂度可达 \(O(\log n)\)(最坏为 \(O(n)\),退化为链表),是高效的动态查找 / 排序数据结构。

一、定义

一棵二叉树满足以下条件,则称为二分搜索树:
对于任意节点 node:
其左子树中的所有节点值都 小于 node.val;
其右子树中的所有节点值都 大于 node.val;
左、右子树本身也必须是二分搜索树(递归定义)。
(可选)若需支持重复值,可约定:左子树 ≤ 当前节点 ≤ 右子树(本文默认无重复值)。

二、BST特性
1)中序遍历结果有序:对 BST 进行中序遍历(左→根→右),会得到一个升序排列的序列(核心特性,常用于验证 BST、排序、找前驱 / 后继节点);
2)查找 / 插入 / 删除的高效性:每次操作可排除一半子树,类似二分查找;
3)无唯一形态:同一组数据可构造不同的 BST(如插入顺序不同),极端情况下会退化为单链表(如按升序插入 1,2,3,4,5)。

三、BST性能特征

四、应用场景
1)动态查找 / 排序:支持高效的插入、删除、查找,且中序遍历可直接得到有序序列;
2)集合 / 映射实现:如 Java TreeSet/TreeMap、C++ set/map(底层为红黑树,属于平衡 BST);
3)范围查询:如找 “大于 x 且小于 y 的所有节点”,利用 BST 的有序性可快速定位边界;
4)前驱 / 后继节点查找:如在 BST 中找某个节点的前驱(比它小的最大值)、后继(比它大的最小值),用于排序、TopK 问题。

五、案例分享

题目1:给定一棵二分搜索树和两个结点,寻找这两个结点的最近公共祖先,如下图所示的二分搜索树,2和8的最近公共祖先为6,2和4的最近公共祖先为2。树形结构见下图。

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if (null == root) return null; // p and q are in the left side of the tree if (root.val > q.val && root.val > p.val) return lowestCommonAncestor(root.left, p, q); // p and q are in the right side of the tree if (root.val < q.val && root.val < p.val) return lowestCommonAncestor(root.right, p, q); // p and q are in the different sides of the tree,q or p may be is the root node. return root; }

题目2:给定一棵二叉树,验证其是否为二分搜索树。

思路1:根据题目的要求,结点的值大于其左孩子结点的值,而小于其右孩子结点的值,则中序遍历该二叉搜索树时,会返回一个有序的列表。但是若是left.val<=root.val<right.val,这种方式就不行了,此种方式效率较低。

import java.util.LinkedList; import java.util.List; public class LC98 { // 根据题意,中序遍历二叉树,看看是否升序排列 public boolean isValidBST(TreeNode root) { if (null == root) return true; // 此时root肯定不为空 List<Integer> nodeValueList = new LinkedList<>(); inOrder(root, nodeValueList); for(int i = 0;i < nodeValueList.size() - 1;++i) { if(nodeValueList.get(i+1) <= nodeValueList.get(i)) return false; } return true; } private void inOrder(TreeNode root, List<Integer> nodeValueList) { if(null == root) return; inOrder(root.left, nodeValueList); nodeValueList.add(root.val); inOrder(root.right, nodeValueList); } public static void main(String[] args) { TreeNode root = new TreeNode(2); root.left = new TreeNode(1); root.right = new TreeNode(3); System.out.println("result=" + new LC98().isValidBST(root)); } }

思路2:直接使用二分搜索树的性质,左<root<右

public class LC98 { // 根据题意,使用其性质直接判断 左<root<右 public boolean isValidBST(TreeNode root) { if (root == null) return true; return valid(root, Long.MIN_VALUE, Long.MAX_VALUE); } public boolean valid(TreeNode root, long leftValue, long rightValue) { if (root == null) return true; if (root.val <= leftValue || root.val >= rightValue) return false; return valid(root.left, leftValue, root.val) && valid(root.right, root.val, rightValue); } public static void main(String[] args) { TreeNode root = new TreeNode(10); root.left = new TreeNode(5); root.right = new TreeNode(15); root.right.left = new TreeNode(6); root.right.right = new TreeNode(20); System.out.println("result=" + new LC98().isValidBST(root)); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/15 12:58:47

基于知识图谱+深度学习的大数据NLP医疗知识问答可视化系统(全网最详细讲解及源码/建议收藏)

基于知识图谱深度学习的大数据NLP医疗知识问答可视化系统&#xff08;全网最详细讲解及源码/建议收藏&#xff09;一、项目概述二、实现知识图谱的医疗知识问答系统基本流程三、项目工具所用的版本号四、所需要软件的安装和使用五、系统实现数据的抓取与存储贪心算法策略知识图…

作者头像 李华
网站建设 2025/12/20 9:51:25

网页页面如何设计JSP大文件上传的暂停与继续功能?

大文件传输系统解决方案 作为浙江IT行业软件公司项目负责人&#xff0c;我们面临的大文件传输需求具有很高的技术挑战性。以下是我针对该需求的专业解决方案分析。 需求分析总结 超大文件传输&#xff1a;单文件100GB&#xff0c;文件夹层级结构保持高稳定性&#xff1a;支持…

作者头像 李华
网站建设 2025/12/15 12:56:55

OpenAI Code Interpreter (“Coworker“) 架构审计与安全取证分析

.12.14 晚上发生的 OpenAI "Code Interpreter"&#xff08;内部代号 "Coworker"&#xff09;文件系统泄露事件&#xff0c;为全球人工智能与软件工程社区提供了一个前所未有的窗口&#xff0c;得以窥探当前最先进的大语言模型&#xff08;LLM&#xff09;执…

作者头像 李华
网站建设 2025/12/15 12:56:42

wangEditor导入pdf支持文本搜索功能实现

企业级Word内容导入与粘贴解决方案设计 项目需求概述 作为福建省科技小巨人领军企业的项目负责人&#xff0c;我正在为集团多个项目寻找一个能够满足以下核心需求的解决方案&#xff1a; 功能需求&#xff1a; Word粘贴功能&#xff08;保留格式、图片自动上传&#xff09;Wo…

作者头像 李华
网站建设 2025/12/23 12:29:35

70、网络记录与DHCP配置详解

网络记录与DHCP配置详解 在网络配置与管理中,有许多重要的概念和工具需要我们去了解和掌握。下面将详细介绍WKS记录、SRV记录以及DHCP服务器(dhcpd)的相关知识,包括其格式、配置和使用方法。 1. WKS记录与SRV记录 1.1 WKS记录 WKS(Well-Known Services)记录的主要作用…

作者头像 李华