LeetCode669. 修剪二叉搜索树

题目

LeetCode669. 修建二叉搜索树

递归思路

递归函数trimBTS的作用

trimBTS用于对传参进来的root节点进行剪枝。剪枝的范围也是根据传进来的参数。

递归返回值

  • TreeNode:最终返回的是BTS的新的根节点

递归参数

  • TreeNode root:当前节点
  • int low:节点的最小值
  • int high:节点的最大值
TreeNode trimBTS(TreeNode root, int low, int high) {}

递归结束条件

当root为空时,说明节点已经遍历完了,此时返回空。

if(root == null) return null;

单次递归逻辑

在单次递归中,处理的情况可分为三种:

  1. 当 root.val < low 时:
    此时 root 的值小于最小边界。因为这是一颗二叉搜索树,所以 root 的左孩子都小于最小边界,都不符合要求,但是root的右孩子中可能还存在符合要求的节点。

    所以在这种情况下,需要对 root 的右孩子继续进行剪枝,并将剪枝后的右孩子返回上一层(即 root 的父节点)。

if(root.val < low) {
	return trimBTS(root.right, low, high);
}
  1. 当 root.val > high 时:
    同理于情况1。此时 root 的值大于最大边界,所以 root 的右孩子都不符合要求,但 root 的左孩子中可能还存在符合要求的节点。所以要将左孩子进行剪枝后返回给上一层。
if(root.val > high) {
	return trimBTS(root.left, low, high);
}
  1. 当 root.val 满足边界要求时:
    此时 root 本身是符合要求的,因此需要对 root 的左右孩子进行剪枝。剪枝完了之后将 root 返回。
root.left = trimBTS(root.left, low, high);
root.right = trimBTS(root.right, low, high);
return root;

完整代码(核心代码模式)

TreeNode trimBTS(TreeNode root, int low, int high) {
	if(root == null) return root;
    if(root.val < low) return trimBST(root.right, low, high);
    if(root.val > high) return trimBST(root.left, low, high);

    root.left = trimBST(root.left, low, high);
    root.right = trimBST(root.right, low, high);
    return root;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值