LeetCode刷题记63
109. 有序链表转换二叉搜索树
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode F(List<Integer> list, int l, int r) {
if (l > r) {
return null;
}
if (l == r) {
return new TreeNode(list.get(l));
}
int m = (l + r) / 2;
TreeNode root = new TreeNode(list.get(m));
root.left = F(list, l, m - 1);
root.right = F(list, m + 1, r);
return root;
}
public TreeNode sortedListToBST(ListNode head) {
List<Integer> list = new ArrayList<Integer>();
while (head != null) {
list.add(head.val);
head = head.next;
}
return F(list, 0, list.size() - 1);
}
}
偷懒的做法就是把链表转成数组。
就和之前一个题目 (忘记了是哪一个)一样的。
这个解法
比较好,mark一下。
5/5
63/150