Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
[code]
public class Solution {
public TreeNode sortedArrayToBST(int[] num) {
if(num==null || num.length==0)return null;
return helper(num, 0, num.length-1);
}
TreeNode helper(int[]num, int start, int end)
{
if(start>end)return null;
int mid=(start+end)/2;
TreeNode root=new TreeNode(num[mid]);
root.left=helper(num, start, mid-1);
root.right=helper(num, mid+1, end);
return root;
}
}
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.
[code]
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
if(head==null)return null;
if(head.next==null)return new TreeNode(head.val);
if(head.next.next==null)
{
TreeNode root=new TreeNode(head.val);
root.right=new TreeNode(head.next.val);
return root;
}
ListNode mid=getMid(head);
TreeNode root=new TreeNode(mid.next.val);
ListNode right=mid.next.next;
mid.next=null;
root.left=sortedListToBST(head);
root.right=sortedListToBST(right);
return root;
}
ListNode getMid(ListNode head)
{
ListNode prev=new ListNode(0);
prev.next=head;
ListNode p=head, q=head.next;
while(q!=null && q.next!=null)
{
p=p.next;prev=prev.next;
q=q.next.next;
}
return prev;
}
}