106.Convert Sorted List to Balanced BST-排序列表转换为二分查找树(中等题)

来源:互联网 发布:阿里云服务器申请发票 编辑:程序博客网 时间:2024/06/05 07:08

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

  1. 题目

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

  2. 样例

    这里写图片描述

  3. 题解

/** * 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 {    /**     * @param head: The first node of linked list.     * @return: a tree node     */    private ListNode current;     public TreeNode sortedListToBST(ListNode head) {        current = head;        int size = getListLength(head);        return sortedListToBSTHelper(size);    }    private 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;    }    private int getListLength(ListNode head)     {        int size = 0;        while (head != null)         {            size++;            head = head.next;        }        return size;    }}

Last Update 2016.10.9

0 0
原创粉丝点击