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

解答
有返回值的递归写法
/*** 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 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);};
无返回值的递归
var insertIntoBST = function (root, val) {let parent = new TreeNode(0);const preOrder = (cur, val) => {if (cur === null) {let node = new TreeNode(val);if (parent.val > val)parent.left = node;elseparent.right = node;return;}parent = cur;if (cur.val > val)preOrder(cur.left, val);if (cur.val < val)preOrder(cur.right, val);}if (root === null)root = new TreeNode(val);preOrder(root, val);return root;};
迭代
var insertIntoBST = function (root, val) {if (root === null) {root = new TreeNode(val);} else {let parent = new TreeNode(0);let cur = root;while (cur) {parent = cur;if (cur.val > val)cur = cur.left;elsecur = cur.right;}let node = new TreeNode(val);if (parent.val > val)parent.left = node;elseparent.right = node;}return root;};
