2014年10月7日星期二

[Leetcode] Convert Sorted List to Binary Search Tree

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
比较简单的递归题目,找到中间节点后递归左右两部分作为左右子树就可以了。
    public TreeNode sortedListToBST(ListNode head) {
        if(head == null) return null;
        else if(head.next == null) return new TreeNode(head.val);
        int n = 0;
        ListNode dummy = new ListNode(0); dummy.next = head;
        ListNode temp1 = head;
        while(temp1 != null) {
            temp1 = temp1.next; n++;
        }
        n = (n+1) / 2;
        ListNode temp2 = dummy; temp1 = head;
        while(n > 1) {
            temp2 = temp2.next;
            temp1 = temp1.next;
            n--; // don't forget to write this!
        }
        temp2.next = null; // safe
        TreeNode root = new TreeNode(temp1.val);
        root.left = sortedListToBST(dummy.next);
        root.right = sortedListToBST(temp1.next);
        return root;
    }

没有评论:

发表评论