convert-sorted-list-to-binary-search-tree

来源:互联网 发布:阿里数据与谁 编辑:程序博客网 时间:2024/06/09 18:27

中等 排序列表转换为二分查找树

26%
通过

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树

您在真实的面试中是否遇到过这个题? 
Yes
样例
标签 Expand 
递归 链表


/** * Definition for ListNode. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int val) { *         this.val = val; *         this.next = null; *     } * } * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */ public class Solution {    private ListNode current;    private int getListLength(ListNode head) {        int size = 0;        while (head != null) {            size++;            head = head.next;        }        return size;    }    public TreeNode sortedListToBST(ListNode head) {        int size;        current = head;        size = getListLength(head);        return sortedListToBSTHelper(size);    }    public TreeNode sortedListToBSTHelper(int size) {        if (size <= 0) {            return null;        }        TreeNode left = sortedListToBSTHelper(size / 2);        TreeNode root = new TreeNode(current.val);        current = current.next;        TreeNode right = sortedListToBSTHelper(size - 1 - size / 2);        root.left = left;        root.right = right;        return root;    }}


0 0