109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:九鼎彩社用的软件 编辑:程序博客网 时间:2024/06/09 23:54

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

这道题就是二分法,findmiddle,然后生成树的左边和右边,也findmiddle,同时要返回previous,将previous的next设置为null

class Solution {    public TreeNode sortedListToBST(ListNode head) {        if (head == null) {            return null;        }        ListNode[] node = findMiddle(head);        ListNode prev = node[0];        ListNode mid = node[1];        TreeNode root = new TreeNode(mid.val);        if (mid.next != null) {            root.right = sortedListToBST(mid.next);        }        if (prev != null) {            prev.next = null;        }        if (prev != null){            root.left = sortedListToBST(head);        }        return root;    }    private ListNode[] findMiddle(ListNode head) {        ListNode[] res = new ListNode[2];        ListNode slow = head;        ListNode fast = head.next;        ListNode prev = null;        while (fast != null && fast.next != null) {            prev = slow;            slow = slow.next;            fast = fast.next.next;        }        res[0] = prev;        res[1] = slow;        return res;    }}




原创粉丝点击