zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    iOS拓展---[转载]视频相关,一定要看呀
    iOS拓展---碰到奇葩需求
    iOS拓展---【转载】成熟的夜间模式解决方案
    2018年度总结
    linux常用命令
    自我认识
    SpringBoot入门最详细教程
    SVN分支的合并和同步
    java Data、String、Long三种日期类型之间的相互转换
    徐胜治:我要留下真正的东西
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4314777.html
Copyright © 2011-2022 走看看