• Lintcode: Insert Node in a Binary Search Tree


    Given a binary search tree  and a new tree node, insert the node into the tree. You should keep the tree still be a valid binary search tree.
    
    Example
    Given binary search tree as follow:
    
         2
    
      /    
    
    1        4
    
             /   
    
           3 
    
    after Insert node 6, the tree should be:
    
         2
    
      /    
    
    1        4
    
             /    
    
           3        6
    
    Challenge
    Do it without recursion

    Recursion做法:

     1 public class Solution {
     2     /**
     3      * @param root: The root of the binary search tree.
     4      * @param node: insert this node into the binary search tree
     5      * @return: The root of the new binary search tree.
     6      */
     7     public TreeNode insertNode(TreeNode root, TreeNode node) {
     8         // write your code here
     9         if (root == null) return node;
    10         if (node == null) return root;
    11         helper(root, node);
    12         return root;
    13     }
    14     
    15     public void helper(TreeNode root, TreeNode node) {
    16         if (root.val <= node.val && root.right == null) root.right = node;
    17         else if (root.val > node.val && root.left == null) root.left = node;
    18         else if (root.val <= node.val) helper(root.right, node);
    19         else helper(root.left, node);
    20     }
    21 }

    Iterative做法:

     1 public class Solution {
     2     /**
     3      * @param root: The root of the binary search tree.
     4      * @param node: insert this node into the binary search tree
     5      * @return: The root of the new binary search tree.
     6      */
     7     public TreeNode insertNode(TreeNode root, TreeNode node) {
     8         // write your code here
     9         if (root == null) return node;
    10         if (node == null) return root;
    11         TreeNode rootcopy = root;
    12         while (root != null) {
    13             if (root.val<=node.val && root.right==null) {
    14                 root.right = node;
    15                 break;
    16             }
    17             else if (root.val>node.val && root.left==null) {
    18                 root.left = node;
    19                 break;
    20             }
    21             else if(root.val <= node.val) root = root.right;
    22             else root = root.left;
    23         }
    24         return rootcopy;
    25     }
    26 }
  • 相关阅读:
    Python基础(6)--条件、循环
    sql中limit和汇总函数的集合使用
    mysql查看表结构
    Axure RP Extension for Chrome
    安装android studio报错Failed to install Intel HAXM.
    java8 环境变量设置
    C、C++文件操作大全
    sqlite3 sqlite3_prepare、sqlite3_step使用
    C/C++获取当前系统时间
    C++ 字符串转化成浮点型
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4314777.html
Copyright © 2020-2023  润新知