【LeetCode】700 and 701(二叉搜索树的查找和插入)

二叉搜索树

二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。
BST 的基础操作:判断 BST 的合法性、增、删、查。
本文通过两个实例来介绍如何用二叉搜索树的特性来实现 「搜索」和「增加」 操作。

700. 二叉搜索树中的搜索

在这里插入图片描述
解法:递归
普通二叉树的搜索需要遍历所有节点来进行依次判断。而对于二叉搜索树,可以利用其左小右大的特性,做类似⼆分搜索的操作,提高搜索⼀个元素的效率。此时对于任一节点的「该做什么」判断如下:

  1. 若当前元素小于目标值,则进入左子树搜索
  2. 若当前元素大于目标值,则进入右子树搜索
  3. 若相等,则返回当前节点
class Solution:
    def searchBST(self, root: TreeNode, val: int) -> TreeNode:
        if not root:
            return None
        if root.val == val:
            return root
        elif root.val > val:
            result = self.searchBST(root.left, val)
        else:
            result = self.searchBST(root.right, val)
        
        return result

701. 二叉搜索树中的插入操作

在这里插入图片描述
在这里插入图片描述
解法:递归
对数据结构的操作⽆⾮遍历 + 访问,遍历就是「找」,访问就是「改」。具体到这个问题,插⼊⼀个数,就是先找到插⼊位置,然后进⾏插⼊操作。
上⼀个问题,我们总结了 BST 中的遍历框架,就是「找」的问题。直接套框架,加上「改」的操作即可。⼀旦涉及「改」,函数就要返回 TreeNode 类型,并且对递归调⽤的返回值进⾏接收。

class Solution:
    def insertIntoBST(self, root: TreeNode, val: int) -> TreeNode:

        if not root:
        	# 找到插入位置,进行修改
            return TreeNode(val)
        
        if root.val > val:
        	# 接收返回值
            root.left = self.insertIntoBST(root.left, val)
        else:
        	# 接收返回值
            root.right = self.insertIntoBST(root.right, val)
        
        return root

总结

  1. 体会二叉搜索树与普通二叉树的搜索过程的异同点。
  2. 体会插入和搜索操作的不同之处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值