如何解决返回时,深度优先搜索不会创建新对象
以下问题来自https://leetcode.com/problems/insert-into-a-binary-search-tree/
我最初编写的代码是(案例1):
public TreeNode insertIntoBST(TreeNode root,int val) {
if (root == null) {
root = new TreeNode(val);
return root;
}
if (val < root.val)
insertIntoBST(root.left,val);
else
insertIntoBST(root.right,val);
return root;
}
但是,我没有得到写答案,因为即使中断条件创建了一个新的TreeNode,它也会在您最后返回根时显示。 答案如下:
输出:[4,2,7,1,3],预期:[4,3,5]
然后我尝试了(案例2):
public TreeNode insertIntoBST(TreeNode root,int val) {
if (root == null) {
return new TreeNode(val);
}
if (val > root.val) {
root.right = insertIntoBST(root.right,val);
} else {
root.left = insertIntoBST(root.left,val);
}
return root;
}
我得到了正确的答案。我知道正确的答案是由于if / else条件下的“ root.left”引起的,但是在情况1中,它将以递归的方式将我带到root.left,然后为变量root创建一个新的TreeNode并将其返回
案例1不起作用的背后逻辑是什么? 递归有时真的让我感到困惑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。