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

84 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第22天,点击查看活动详情

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

题目分析

题目给出一课二叉搜索树的根结点和要插入树中的值,要求将值插入到二叉搜索树中。可能存在多种有效的方式,只要保证插入后,仍然为二叉搜索树即可。

这道题看起来比较困难,但是举出几个例子画一下图后就会发现不论是什么数据都可以在叶子节点上插入,这大大降低了这道题的复杂度。

例如下面这棵二叉搜索树,如果想要插入10,只需要在7的右子树上插入10。如果想要插入0,只需要在1的左子树上插入0,以此类推。

image.png

解题

只需要根据二叉搜索树性质往下搜索,搜索到叶子节点时即可插入。

对于如何插入节点到二叉搜索树的问题。当判断节点为空时,证明已经到了,应该插入的位置。这时只要新建一个节点,值为要插入的val值,返回新建的节点。并复制给左子树或者右子树即可。

最后返回root根节点,就可以得到完整的二叉搜索树结构。

代码如下:

var insertIntoBST = function (root, val) {
    const setInOrder = (root, val) => {
        if (root === null) {
            let node = new TreeNode(val);
            return node;
        }
        if (root.val > val)
            root.left = setInOrder(root.left, val);
        else if (root.val < val)
            root.right = setInOrder(root.right, val);
        return root;
    }
    return setInOrder(root, val);
};

总结

这道题题目给出的比较复杂,很容易让人误以为是比较困难的题。但是如果能反应到只需要插入到叶子节点上,就有了很清晰的思路。

做这道题的时候对于怎么插入节点比较困惑,后来发现是在回溯中赋值。