Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; next = null; }
* }
*/
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private ListNode current;
public TreeNode sortedListToBST(ListNode head) {
if(head == null) return null;
int size = getSize(head);
current = head;
return helper(size);
}
private TreeNode helper(int size){
if(size <= 0) return null;
TreeNode left = helper(size / 2);
TreeNode root = new TreeNode(current.val);
current = current.next;
TreeNode right = helper(size - size / 2 - 1);
root.left = left;
root.right = right;
return root;
}
private int getSize(ListNode head){
int count = 0;
while(head != null){
count++;
head = head.next;
}
return count;
}
}