无尽算法之 二叉搜索树中的插入

给定二叉搜索树(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;
    }
}

发布了152 篇原创文章 · 获赞 274 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33709508/article/details/104017437