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

6.22二叉搜索树中的插入操作(LC701-M)_第1张图片

6.22二叉搜索树中的插入操作(LC701-M)_第2张图片

算法:

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

调试过程:

6.22二叉搜索树中的插入操作(LC701-M)_第3张图片

原因:

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

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

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

修改后:

6.22二叉搜索树中的插入操作(LC701-M)_第4张图片

6.22二叉搜索树中的插入操作(LC701-M)_第5张图片

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

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

而且,比较时应该将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)。我们只使用了常数大小的空间。

你可能感兴趣的:(#,6.二叉树,数据结构)