701. 二叉搜索树中的插入操作

递归

解题思路

  1. 二叉搜索树的中序遍历是递增序列,左节点的值 < 根节点的值 < 右节点的值;

    • val < root.val 递归左子树;
    • val > root.val 递归右子树;
  2. 终止条件,root == null 的时候返回新建 val 的节点;

复杂度

  1. 时间复杂度:O(N),其中 N 为树中节点的数目,最坏情况下,需要将值插入到树的最深的叶子结点上,而叶子节点最深为 O(N)

  2. 空间复杂度:O(1),只使用了常数大小的空间;

代码实现

var insertIntoBST = function (root, val) {
    if (root === null) return new TreeNode(val);

    if (root.val > val) {
        root.left = insertIntoBST(root.left, val);
    } else if (root.val < val) {
        root.right = insertIntoBST(root.right, val);
    }

    return root;
};

迭代

复杂度

  1. 时间复杂度:O(N),其中 N 为树中节点的数目,最坏情况下,需要将值插入到树的最深的叶子结点上,而叶子节点最深为 O(N)

  2. 空间复杂度:O(1),只使用了常数大小的空间;

代码实现

var insertIntoBST = function (root, val) {
    if (root === null) return new TreeNode(val);

    let curr = root;
    while (curr !== null) {
        if (val < curr.val) {
            if (curr.left === null) {
                curr.left = new TreeNode(val);
                break;
            } else {
                curr = curr.left;
            }
        } else {
            if (curr.right === null) {
                curr.right = new TreeNode(val);
                break;
            } else {
                curr = curr.right;
            }
        }
    }

    return root;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 递归
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现
  2. 2. 迭代
    1. 2.1. 复杂度
    2. 2.2. 代码实现