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 }

 

posted @ 2014-11-03 23:20  birdhack  阅读(113)  评论(0编辑  收藏  举报