学习首页/数据结构/二叉搜索树交互演示 · JavaScript

代码与动画 BINARY SEARCH TREE

二叉搜索树.

左子树值小于节点,右子树值大于节点。

查找 / 插入 / 删除 O(h)遍历 O(n)演示最多 7 个节点

原理与执行逻辑

二叉搜索树要求左子树所有值小于当前节点,右子树所有值大于当前节点。比较目标与节点值,就能决定只进入哪一侧。

执行步骤

  1. 查找或插入时从根比较,小于走左边,大于走右边。
  2. 插入到空链接处,重复值不新增节点。
  3. 删除叶节点直接移除;只有一个孩子时用孩子接替。
  4. 删除有两个孩子的节点时,取右子树最小值替换,再删除原后继;中序遍历依次访问左、根、右。

关键理解

大小关系约束整棵子树。操作成本取决于树高,当前实现不做平衡,连续插入有序值可能形成链。前序为根、左、右,后序为左、右、根。

简短示例

根为 38、左孩子 20、右孩子 65 时,查找 20 只进入左侧,中序输出 [20, 38, 65];删除根时可用 65 替换。

代码与执行动画

STEP 0 / 0
二叉搜索树
const root = { value: 38,  left: { value: 20, left: null, right: null },  right: { value: 65, left: null, right: null }};
4 行 · 0 个片段标记
3 个节点左 < 根 < 右
LR2038root65
当前数据正在操作已访问 / 命中标记 / 指针
0

当前结构

选择操作,观察对应代码和状态变化。

操作当前结构

下一次操作使用上次完成后的数据。重置结构恢复初始示例。

值和键:1 至 99;位置从 0 开始。

实现说明

二叉搜索树的操作规则

本例不执行平衡操作,拒绝重复值。删除双孩子节点时使用右子树最小节点替换;h 是树高,最坏可达 n。支持前序、中序、后序遍历;中序输出为升序。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。