题目
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
1 递归,每次找到中点,然后中点作为root,左子树递归,右子树递归。
2 虽然思路很容易,但是其中几个细节很容易出错。
3 首先是找中点的时候,怎么判断。
4 其次是我们需要中点之前的节点来截断,这个怎么处理
5 怎样结束这样的递归,如果每次都处理left直接把head传入,就永远 结束不了了。
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
if(head == null){
return null;
}
ListNode fast = head.next;
ListNode dummy = new ListNode(Integer.MIN_VALUE);
dummy.next = head;
ListNode slowpre = dummy;
while(fast!=null && fast.next!=null){
slowpre = slowpre.next;
fast = fast.next.next;
}
TreeNode root = new TreeNode(slowpre.next.val);
ListNode anotherright = slowpre.next.next;
slowpre.next = null;
root.left = sortedListToBST(dummy.next);
root.right = sortedListToBST(anotherright);
return root;
}
}