当前课程知识点:数据结构(下) > 第七章 二叉搜索树 > (b2)BST:插入 > 07B2-1 插入:算法
我们来介绍BST的插入算法
具体来说 如果插入的关键码为e
我们就需要首先调用search接口
对它进行定位
既然我们已经约定
禁止雷同元素的存在
所以这里不妨假设e还不存在
请注意 此时的search尽管会以失败告终
但_hot变量将会指向
我们查找路径的末端节点
而更重要的是
作为我们的返回值
_hot的某一个当前仍为空的孩子
恰好就是我们待插入节点
应该接入的位置
来看一个具体的实例
同样地 你也需要首先确认这是一棵BST
接下来 如果我们需要插入40
就会在search的过程中
经过一系列的比较
将查找的范围逐步地收缩
直至最终失败于46
请注意 在此时
_hot指向的就是这个46
而此时search的返回值恰好就是
46当前为NULL的那个左孩子引用
因此我们只需将待插入的关键码
封装为一个节点
并且令46对应的那个孩子引用
改为指向这个新节点
即可完成这次插入操作
插入之后就像这样
在此接入了一个新的节点
好 我们进一步地假设需要再插入55
同样地 经过一系列的搜索
我们最终失败于53
请注意 尽管此时53的左孩子是存在的
但是根据55和53的大小 在这个位置
我们最终试图转向的是它的右孩子
只不过这个右孩子当前为空
所以search返回的恰好就是53
这个当前为空的右孩子引用
而根据我们此前所做的统一语义约定
在此时_hot指向的恰好就是53
因此同样地 我们只需将待插入的55
封装为一个节点
并且令53原先为空的那个孩子引用
改为指向这个新节点
也可以顺利地完成一次插入操作
新插入的节点以及此后所对应的BST
就是这个样子
既然每个新节点所插入的位置
在此前都是为空
所以在插入之后
它们也必然是叶子
这也是为什么它们都被画作方形
而不是圆形
好了 接下来的问题自然就是
这样一个插入的过程
如何兑现为具体的代码呢?
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试