代码与动画 BINARY SEARCH TREE
二叉搜索树.
左子树值小于节点,右子树值大于节点。
查找 / 插入 / 删除 O(h)遍历 O(n)演示最多 7 个节点
原理与执行逻辑
二叉搜索树要求左子树所有值小于当前节点,右子树所有值大于当前节点。比较目标与节点值,就能决定只进入哪一侧。
执行步骤
- 查找或插入时从根比较,小于走左边,大于走右边。
- 插入到空链接处,重复值不新增节点。
- 删除叶节点直接移除;只有一个孩子时用孩子接替。
- 删除有两个孩子的节点时,取右子树最小值替换,再删除原后继;中序遍历依次访问左、根、右。
关键理解
大小关系约束整棵子树。操作成本取决于树高,当前实现不做平衡,连续插入有序值可能形成链。前序为根、左、右,后序为左、右、根。
简短示例
根为 38、左孩子 20、右孩子 65 时,查找 20 只进入左侧,中序输出 [20, 38, 65];删除根时可用 65 替换。
代码与执行动画
STEP 0 / 0const root = { value: 38, left: { value: 20, left: null, right: null }, right: { value: 65, left: null, right: null }};3 个节点左 < 根 < 右
当前数据正在操作已访问 / 命中标记 / 指针
0
当前结构
选择操作,观察对应代码和状态变化。
操作当前结构
下一次操作使用上次完成后的数据。重置结构恢复初始示例。
二叉搜索树的操作规则
本例不执行平衡操作,拒绝重复值。删除双孩子节点时使用右子树最小节点替换;h 是树高,最坏可达 n。支持前序、中序、后序遍历;中序输出为升序。
对应题目与扩展练习
观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。
利用节点大小关系选择左、右子树。