当前位置: 首页 > article >正文

【LeetCode 刷题】二叉树-二叉搜索树的修改与构造

此博客为《代码随想录》二叉树章节的学习笔记,主要内容为二叉搜索树的修改与构造相关的题目解析。

文章目录

  • 701.二叉搜索树中的插入操作
  • 450.删除二叉搜索树中的节点
  • 669. 修剪二叉搜索树
  • 108.将有序数组转换为二叉搜索树

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

题目链接

class Solution:
    def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
        if not root:
            return TreeNode(val)
        if root.val < val:
            root.right = self.insertIntoBST(root.right, val)
        else:
            root.left = self.insertIntoBST(root.left, val)
        return root
  • 类似于二分查找,当 root 为空时,表明找到了插入位置,创建新的 TreeNode 返回

450.删除二叉搜索树中的节点

题目链接

class Solution:
    def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
        if not root:
            return None
        if root.val < key:
            root.right = self.deleteNode(root.right, key)
        elif root.val > key:
            root.left = self.deleteNode(root.left, key)
        else:
            if not root.left:
                return root.right
            if not root.right:
                return root.left
            ptr = root.right
            while ptr.left:
                ptr = ptr.left
            ptr.left = root.left
            root = root.right
        return root
  • 要删除的节点可能会存在以下情况:
    • 左/右子树为空:直接返回另一侧的子树
    • 左/右子树都不空:需要修改树的结构,上述代码的逻辑为让 root.right 节点继位,需要将 root.left 节点代表的子树转移到刚好比 root 大的下一个位置(也即 root.right 子树中的最左侧节点)的左子树上
  • ptr 即为找 root.right 中最左侧的节点的指针

669. 修剪二叉搜索树

题目链接

class Solution:
    def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
        if not root:
            return None
        if root.val < low:
            return self.trimBST(root.right, low, high)
        elif root.val > high:
            return self.trimBST(root.left, low, high)
        else:
            root.left = self.trimBST(root.left, low, high)
            root.right = self.trimBST(root.right, low, high)
            return root
  • 注意:例如当 root.val < low 时,不能直接返回 root.right,因为丢弃了左子树后,右子树还有可能因为节点值大于 high 而被修剪

108.将有序数组转换为二叉搜索树

题目链接

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        if not nums:
            return None
        mid = len(nums) // 2
        left = self.sortedArrayToBST(nums[:mid])
        right = self.sortedArrayToBST(nums[mid+1:])
        return TreeNode(nums[mid], left, right)

http://www.kler.cn/a/528708.html

相关文章:

  • 比较热门的嵌入式项目
  • 【SSM】Spring + SpringMVC + Mybatis
  • 《苍穹外卖》项目学习记录-Day10订单状态定时处理
  • 精准化糖尿病知识问答(LLM+机器学习预测模型)
  • AI DeepSeek-R1 Windos 10 环境搭建
  • 计算机网络之计算机网络的分类
  • PostgreSQL 数据查询操作(排序、筛选、连接、分组、子查询)
  • 手写call函数、手写apply函数、手写bind函数
  • matlab快速入门(2)-- 数据处理与可视化
  • 【Redis】Redis修改连接数参数
  • 自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
  • Java小白入门教程:LinkedList
  • 车载以太网---数据链路层
  • Spark SQL读写Hive Table部署
  • SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言
  • 10:预处理
  • C++,vector:动态数组的原理、使用与极致优化
  • 回溯算法理论基础
  • 递归练习七(floodfill 算法)
  • C#属性和字段(访问修饰符)
  • 代码随想录-训练营-day17
  • 自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)
  • 代码随想录算法训练营第四十二天-动态规划-股票-188.买卖股票的最佳时机IV
  • JVM运行时数据区域-附面试题
  • 笔记:同步电机调试时电角度校正方法说明
  • Python GIL(全局解释器锁)机制对多线程性能影响的深度分析