6.22二叉搜索树中的插入操作(LC701-M)

2023-12-13 08:18:06

算法:

在二叉搜索树种插入任意一个节点,都可以在叶子节点找到其可以插入的位置。

调试过程:

原因:

TreeNode node = new TreeNode(node.val = val);

在尝试创建新的?`TreeNode`?时,使用了一个未初始化的变量?`node`

可以简单地创建一个新的?`TreeNode`,并将其值设置为?`val`

修改后:

原因:新节点没有成功插入。

没有正确递归创建左右子树。

而且,比较时应该将val和root.val比较。

正确代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode insertIntoBST(TreeNode root, int val) {
        //若为叶子节点,则将该节点向上返回(回溯)
        if (root == null) {
            TreeNode node = new TreeNode(val);
            return node;
        }
        //若val小于root.val,则将Node插在root这个节点的左边
        if (val < root.val) root.left=insertIntoBST(root.left, val);
        //若val大于root.val,则将Node插在root这个节点的左边
        if (val > root.val) root.right=insertIntoBST(root.right, val);
        //最终返回新树的root
        return root;
    }
}

时间空间复杂度:

时间复杂度:

O(N),其中 N 为树中节点的数目。最坏情况下,我们需要将值插入到树的最深的叶子结点上,而叶子节点最深为 O(N)。

空间复杂度:

O(1)。我们只使用了常数大小的空间。

文章来源:https://blog.csdn.net/m0_50696252/article/details/134952028
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。