题目:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
题意:
将有序链表转化为二叉查找树
解题思路:
通过快慢指针找到链表中点
然后以该中点来建立二叉查找树
递归遍历以中点左边的树(包括中点)
递归遍历以中点右边的树(中点下一个结点开始)
代码:
public TreeNode sortedListToBST(ListNode head) {
return createTree(head,null);
}
public TreeNode createTree(ListNode head, ListNode tail) {
if(head == tail) {
return null;
}
ListNode fast = head;
ListNode slow = head;
while(fast.next != tail && fast.next.next != tail) {
fast = fast.next.next;
slow = slow.next;
}
TreeNode treeNode = new TreeNode(slow.val);
treeNode.left = createTree(head,slow);
treeNode.right = createTree(slow.next,tail);
return treeNode;
}