Skip to main content

二叉搜索树中的插入操作

题目

给定二叉搜索树(BST)的根节点和要插入树中的值, 将值插入二叉搜索树. 返回插入后二叉搜索树的根节点. 输入数据保证新值和原始二叉搜索树中的任意节点值都不同. 注意, 可能存在多种有效的插入方式, 只要树在插入后仍保持为二叉搜索树即可. 你可以返回任意有效的结果.

示例

输入: root = 如下, val = 5

     4
/ \
2 7
/ \
1 3

输出: 下面两种都符合要求.

     4
/ \
2 7
/ \ /
1 3 5

5
/ \
2 7
/ \
1 3
\
4

题解

这里是题解这里是题解这里是题解这里是题解这里是题解

/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} val
* @return {TreeNode}
*/
var insertIntoBST = function (root, val) {
const node = new TreeNode(val)
if (root === null) return node

let curr = root

// 如果 val 小于当前节点的 val, 说明得往左边插
if (val < curr.val) {
// 如果当前节点的左侧子节点已经被占了
if (curr.left) {
// 就递归呗
curr = curr.left
insertIntoBST(curr, val)
} else {
// 否则就直接把新节点插到这里
curr.left = node
}
// 右侧同理
} else {
if (curr.right) {
curr = curr.right
insertIntoBST(curr, val)
} else {
curr.right = node
}
}

return root
}