给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。
例如
给定二叉搜索树:
4
/ \
2 7
/ \
1 3
和 插入的值: 5
你可以返回这个二叉搜索树:
4
/ \
2 7
/ \ /
1 3 5
或者这个树也是有效的:
5
/ \
2 7
/ \
1 3
\
4
思路:
二叉搜索树的巨大优势就是:在平均情况下,能够在 \mathcal{O}(\log N)O(logN) 的时间内完成搜索和插入元素。
二叉搜索树的插入方法非常简单,我们将插入的节点作为叶子节点的子节点插入。插入到哪个叶节点可以遵循以下原则:
若 val > node.val,插入到右子树。
若 val < node.val,插入到左子树。
方法一:递归
算法:
若 root == null
,则返回 TreeNode(val)
。
若 val > root.val
,插入到右子树
。
若 val < root.val
,插入到左子树
。
返回 root。
题解:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root==null)
return new TreeNode(val);
if(val<root.val)
root.left=insertIntoBST(root.left, val);
if(val>root.val)
root.right=insertIntoBST(root.right, val);
return root;
}
}