单链表转换为平衡查找树(Leetcode109)

2018-11-11  本文已影响0人  zhouwaiqiang

题目要求

解题思路

源代码实现(非本人实现,学习的他人解法)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        return helper(head, null);
    }
    
    private TreeNode helper(ListNode head, ListNode last) {
        if (head == null || head == last) return null;
        ListNode mid = head, temp = head;
        //寻找中间节点
        while (temp != last && temp.next != last) {
            mid = mid.next;
            temp = temp.next.next;
        }
        TreeNode root = new TreeNode(mid.val);
        root.left = helper(head, mid);
        root.right = helper(mid.next, last);
        return root;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读