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 }