微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回时,深度优先搜索不会创建新对象

如何解决返回时,深度优先搜索不会创建新对象

以下问题来自https://leetcode.com/problems/insert-into-a-binary-search-tree/

解决方案仅是应用深度优先搜索添加新的TreeNode。

我最初编写的代码(案例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 举报,一经查实,本站将立刻删除。