zoukankan      html  css  js  c++  java
  • LF.51.Insert In Binary Search Tree

    Insert a key in a binary search tree if the binary search tree does not already contain the key. Return the root of the binary search tree.
    
    Assumptions
    
    There are no duplicate keys in the binary search tree
    
    If the key is already existed in the binary search tree, you do not need to do anything
    
    Examples
    
            5
    
          /    
    
        3        8
    
      /   
    
     1     4
    
    insert 11, the tree becomes
    
            5
    
          /    
    
        3        8
    
      /           
    
     1     4       11
    
    insert 6, the tree becomes
    
            5
    
          /    
    
        3        8
    
      /        /  
    
     1     4   6    11

    DFS recursive:

     1 public class Solution {
     2   public TreeNode insert(TreeNode root, int key) {
     3     // Write your solution here
     4     //this is the base case
     5     if (root == null ) {
     6         return new TreeNode(key) ;
     7     }
     8     if (root.key == key){
     9         return root ;
    10     }
    11     if (root.key > key) {
    12         //go to left
    13         root.left = insert(root.left, key) ;
    14     }
    15     if (root.key < key ) {
    16         //go to right
    17         root.right = insert(root.right, key) ;
    18     }
    19     //back -> upper -> upper upper to the top then return
    20     return root ;
    21   }
    22 }

    since this is called tail recursion, you are recommended to do it in interative: time: O(h) space: O(1)

    Interative:

    /*iterative: time o(h) space: o(1)
      note, here requires: Return the root of the binary search tree.
      so you need to maintain the reference of the root
      */
      public TreeNode insert_iter2(TreeNode root, int key) {
        // Write your solution here
        //this is the base case
        TreeNode newNode = new TreeNode(key);
        if (root == null ) {
            return newNode;
        }
        TreeNode curr = root ;
        while(curr != null){
            if (curr.key == key) {
                return root ; //do nothing
            } else if(curr.key < key){
                if (curr.right == null) {
                    curr.right = newNode;
                    break ;
                } else{
                    curr = curr.right ;
                }
            } else {
                if (curr.left == null) {
                    curr.left = newNode ;
                    break ;
                } else {
                    curr = curr.left ;
                }
            }
        }
        //return the root
        return root ;
      }
  • 相关阅读:
    spring对事务的配置
    Mysq中的流程控制语句的用法
    mysql存储过程和常用流程控制
    ztree更换节点图标
    eclipse调试(debug)的时候,出现Source not found,Edit Source Lookup Path,一闪而过
    myeclipse如何设置或关闭断点调试自动跳入debug模式
    Druid数据源对数据库访问密码加密好麻烦
    js中if()条件中变量为false的情况
    TFS2008 安装图解(详细版本)(转载)
    数字格式化
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8655269.html
Copyright © 2011-2022 走看看