问题描述
给定一个升序的链表,要求将其转换成高度平衡的搜索二叉树。题目链接:**点我**
样例输入输出
输入:1->2->3
输出:
2
/ \
1 3
输入:1
输出:1
问题解法
此题跟 LeetCode-108类似,只不过前面是数组,这次是链表。解法类似,先找到中间的节点,然后拆分左子树和右子树,依次进行递归构造。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
class Solution { public TreeNode sortedListToBST(ListNode head) { return convert2BST(head, null); }
private TreeNode convert2BST(ListNode left, ListNode right) { if (left == right) { return null; }
ListNode fast = left; ListNode slow = left; while (fast != right && fast.next != right) { fast = fast.next.next; slow = slow.next; }
TreeNode root = new TreeNode(slow.val); root.left = convert2BST(left, slow); root.right = convert2BST(slow.next, right); return root; } }
|