標籤:
Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
很簡單的二分法,只要給出Array的開始和結束下標作為參數傳入即可。
1 public TreeNode sortedArrayToBST(int[] num) { 2 return constructBST(num,0,num.length-1); 3 } 4 public TreeNode constructBST(int[] num, int start, int end) { 5 if(start>end) 6 return null; 7 if(start==end) 8 return new TreeNode(num[start]); 9 int mid = (start+end)/2;10 TreeNode root = new TreeNode(num[mid]);11 root.left = constructBST(num, start, mid-1);12 root.right = constructBST(num, mid+1, end);13 return root;14 }
Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
對於鏈表來說,情況稍微複雜一些,最簡單的思路是可以遍曆一遍鏈表存到array中然後構建。這裡採用直接構建的方法,就是用快慢指標找到鏈表中點,左半部分鏈表終點指向null,遞迴構建成左子樹。右半部分遞迴構建成右子樹即可。如果不想破壞原有鏈表那麼可以採用先存到array中再構建的方法。
1 public TreeNode sortedListToBST(ListNode head) { 2 if(head==null) 3 return null; 4 if(head.next == null) 5 return new TreeNode(head.val); 6 ListNode fast = head.next; 7 ListNode slow = head; 8 while(fast!=null && fast.next!=null && fast.next.next!=null) { 9 fast = fast.next.next;10 slow = slow.next;11 }12 ListNode root = slow.next;13 slow.next = null;14 TreeNode tRoot = new TreeNode(root.val);15 tRoot.left = sortedListToBST(head);16 tRoot.right = sortedListToBST(root.next);17 return tRoot;18 }
[Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree