题目:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
解题思路:
借鉴于:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/discuss/35476/Share-my-JAVA-solution-1ms-very-short-and-concise.
链表转平衡二叉树,用递归。因为链表是有序的,所以中间节点就是根节点。根据平衡二叉树的定义,把根节点左边和右边的链表也分别看成是平衡二叉树,用同样的方法解决。
代码:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public TreeNode sortedListToBST(ListNode head) {
if(head == null)return null;
return toBST(head,null);
}
public TreeNode toBST(ListNode head,ListNode tail){
if(head == tail)return null;
ListNode slow=head,fast=head;
while (fast!=tail && fast.next!=tail){
slow = slow.next;
fast = fast.next.next;
}
TreeNode root = new TreeNode(slow.val);
root.left = toBST(head,slow);
root.right = toBST(slow.next,tail);
return root;
}