题目:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
解析:把有序的链表convert成AVL树
想到使用递归,例如【1,2,3,4,5,6,7】中间的数4作为树的root,左子树为123,右子树为567。利用递归再分别构造出左右子树
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
if(head==null) return null;
ListNode cur=head;
List<Integer> list=new ArrayList<Integer>();
while(cur!=null){
list.add(cur.val);
cur=cur.next;
}
return splitTree(list,0,list.size()-1);
}
public static TreeNode splitTree(List<Integer> a,int begin,int end){
if(begin > end) return null;
int mid=(begin+end)/2;
TreeNode root=new TreeNode(a.get(mid));
root.left=splitTree(a,begin,mid-1);
root.right=splitTree(a,mid+1,end);
return root;
}
}
没什么可说的了