【代码随想录训练营】【Day23】第六章|二叉树|669. 修剪二叉搜索树 |108.将有序数组转换为二叉搜索树|538.把二叉搜索树转换为累加树

文章介绍了如何使用Java实现LeetCode中的几个二叉搜索树问题,包括修剪不在指定区间内的节点,有序数组转二叉搜索树,以及将二叉搜索树转换为累加树。主要方法是递归,利用二叉搜索树的特性来优化解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修剪二叉搜索树

题目详细:LeetCode.669

做这道题之前建议先看视频讲解,没有想象中那么复杂:代码随想录—修剪二叉搜索树

由题可知,需要删除节点值不在区间内的节点,所以可以得到三种情况:

  • 情况一:root.val < low
  • 情况二:root.val > high
  • 情况三:low < root.val < high
  • 当节点满足情况一和情况二的条件时,删除该节点

但被删除节点的子树可能存在值在区间内的节点,利用二叉搜索树的特点可得:

  • 情况一:root.val < low,root左子树上的节点值都比root.val小,右子树上的节点值都比root.val大,所以满足区间的节点只会在右子树上出现,递归修剪其右子树并返回新的子节点
  • 情况二:root.val > high,root左子树上的节点值都比root.val小,右子树上的节点值都比root.val大,所以满足区间的节点只会在左子树上出现,递归修剪其左子树并返回新的子节点
  • 情况三:low < root.val < high,说明当前节点不需要被删除,递归修剪其左右子树,返回修剪好的二叉搜索树的新的根节点

Java解法(递归):

class Solution {
   
    public TreeNode trimBST(TreeNode root, int low, int high) {
   
        if(null == root) return null;
        // 根据二叉搜索树的特点可知
        if(root.val < low){
   
            // 删除节点的右子树中可能存在值在区间内的节点
            // 返回修剪好的右子树的新的子节点
            return trimBST
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值