【MOOC】二叉搜索树

本文探讨了二叉搜索树在查找、插入和删除操作中的应用。重点介绍了查找Find()操作的效率问题,指出尾递归可能导致效率不高。同时,详细阐述了插入Insert()和删除delete()的过程,特别是删除操作中如何找到替代结点以保持二叉搜索树的平衡。课后习题部分讨论了完全二叉树中最小和最大结点的特性。

 解决动态查找问题

目录

一、二叉搜索树 

二、查找Find()

 三、插入Insert()

四、删除delete()

五、课后习题



一、二叉搜索树 

 

二、查找Find()

 

 

 都是尾递归,效率不高

 //平衡二叉树

 三、插入Insert()

 //原树为空,返回修改后的下个BST;原树不为空,返回未修改的下个BST。

四、删除delete()

 

左子树的最大值或者右子树的最小值一定不是有两个儿子的结点,

且替代其也不会破坏二叉搜索树的结构(可以替代根结点)。

 

1.找到右子树最小Tmp,填进要删除的结点

2.在右子树中递归删除右子树最小

(    递归找到要删除的结点【最后一个if】【if、else if、else if】,

        删除该结点【最后一个else】)

 【最后一个else】:

Tmp=要删除的结点地址BST

BST=左孩子地址、右孩子地址、NULL【相当于其父结点指向左孩子、右孩子或NULL】

free(Tmp):释放要删除结点(Tmp仍为其地址)

五、课后习题

 树只有一种可能

 

243765

 

若为完全二叉树,则只可能在最后一行【有左子树没有右子树】,或者【左右子树都有】,

不可能【有右子树没有左子树】。

因此最小结点一定是叶节点,最大结点则可以是【有左子树没有右子树】的结点。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值