gpt4 book ai didi

java - 使用递归修剪二叉搜索树

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:54 25 4
gpt4 key购买 nike

TRIM BST给定二叉搜索树以及最低和最高边界 L 和 R,修剪树,使其所有元素都位于 [L, R] (R >= L) 中。您可能需要更改树的根,因此结果应返回修剪后的二叉搜索树的新根。

我是一个新手,刚刚开始学习递归..我编写了如下代码。它可以处理一些测试用例,并为其余的测试用例提供空指针异常。我知道问题的解决方案(也写在下面),但我想修复我的代码,而不是按照解决方案的编写方式编写。

这是我的尝试。

    /**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode trimBST(TreeNode root, int L, int R) {
if(root==null)
{
return root;
}
if(root.val<L)
{
root=root.right;
if(root==null)
{
return root;
}
}
if(root.val>R)
{
root=root.left;
if(root==null)
{
return root;
}
}
if(root.left!=null)
{
if(root.left.val<L)
{
root.left=root.left.right;
}

}
if(root.right!=null)
{
if(root.right.val>R)
{
root.right=root.right.left;
}

}
trimBST(root.left,L,R);
trimBST(root.right,L,R);
return root;

}
}

给出错误

    [3,1,4,null,2]
3
4

解决办法在这里

class Solution {
public TreeNode trimBST(TreeNode root, int L, int R) {
if (root == null) return root;
if (root.val > R) return trimBST(root.left, L, R);
if (root.val < L) return trimBST(root.right, L, R);

root.left = trimBST(root.left, L, R);
root.right = trimBST(root.right, L, R);
return root;
}
}

我知道我在递归代码中的某个地方搞砸了,并且将值设置为空并再次使用它,我觉得我非常接近解决方案。我自己无法弄清楚这一点。请帮助我。

最佳答案

在这种情况下它对您不起作用的原因是,最后您需要递归地获取新的root。也就是说,trimBST(root.left, L, R);会递归地沿着树向下走,但最终什么也没有返回。因此,您需要将其分配给树的左侧或右侧。

root.left = trimBST(root.left, L, R);
root.right = trimBST(root.right, L, R);

但是之后你还会遇到另一个问题,与root=root.right;root=root.left;相关。作为一个热门,你也必须在这里使用递归。

关于java - 使用递归修剪二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56870608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com