LeetCode 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.
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; next = null; } 7 * } 8 */ 9 /** 10 * Definition for binary tree 11 * public class TreeNode { 12 * int val; 13 * TreeNode left; 14 * TreeNode right; 15 * TreeNode(int x) { val = x; } 16 * } 17 */ 18 public class Solution { 19 public TreeNode sortedListToBST(ListNode head) { 20 ArrayList<ListNode> listNodes=new ArrayList<ListNode>(); 21 if (head==null) return null; 22 ListNode node=head; 23 while (node!=null) { 24 listNodes.add(node); 25 node=node.next; 26 } 27 int middle=(listNodes.size()-1)/2; 28 TreeNode root =new TreeNode(listNodes.get(middle).val); 29 if (middle>0){ 30 listNodes.get(middle-1).next=null; 31 root.left=sortedListToBST(listNodes.get(0)); 32 33 } 34 if (middle<listNodes.size()-1){ 35 root.right=sortedListToBST(listNodes.get(middle+1)); 36 37 } 38 return root; 39 40 } 41 }