题目描述:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
简单的递归实现,dfs递归+快慢指针
不同场景中快慢指针方法具体细节可能不同,例如这里:1->2->3,返回的是2,1->2,返回的是2。另外场景中:1->2->3,可能需要返回的是3。
代码实现
public class Solution
{
public TreeNode sortedListToBST(ListNode head)
{
if (head == null)
return null;
if (head.next == null)
return new TreeNode(head.val);
ListNode midNode = findMidListNode(head);
TreeNode tNode = new TreeNode(midNode.val);
tNode.left = sortedListToBST(head);
tNode.right = sortedListToBST(midNode.next);
return tNode;
}
private ListNode findMidListNode(ListNode head)
{
ListNode slow = head;
ListNode fast = head.next;
while (fast.next != null && fast.next.next != null)
{
slow = slow.next;
fast = fast.next.next;
}
ListNode res = slow.next;
slow.next = null;
return res;
}
}