Convert Sorted List to Binary Search Tree

题目地址:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/#/description

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

解题思路:
用recursion的办法来建立tree。需要注意的是curr需要设为全局变量,而且需要在结束左边recursion之后往后指一个。

代码:

public class Solution {
    ListNode curr;
    public TreeNode sortedListToBST(ListNode head) {
        if(head == null){
            return null;
        }
        curr = head;
        int len = getLen(head);
        return helper(len);
    }
    private TreeNode helper(int len){
        if(len == 0){
            return null;
        }
        TreeNode left = helper(len / 2);
        TreeNode root = new TreeNode(curr.val);
        curr = curr.next;
        TreeNode right = helper(len - len / 2 - 1);
        root.left = left;
        root.right = right;
        return root;
    }
    private int getLen(ListNode head){
        if(head.next == null){
            return 1;
        }
        ListNode curr = head;
        int len = 0;
        while(curr != null){
            curr = curr.next;
            len++;
        }
        return len;
    }
}






Comments

Popular Posts