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 }

 

你可能感兴趣的:(Binary search)