[LeetCode][Java] Convert Sorted List to Binary Search Tree

来源:互联网 发布:红米note清空数据失败 编辑:程序博客网 时间:2024/06/10 17:05

题目:

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

题意:

给定一个单链表,其中元素按照降序的顺序排列,将其转化为高度平衡的二叉搜索树树。

算法分析:

  * 利用算法<Convert Sorted Array to Binary Search Tree>
  * 首先将 单链表转化为数组
  * 再利用上述算法完成

AC代码:

<span style="font-family:Microsoft YaHei;font-size:12px;">public class Solution {    public TreeNode sortedListToBST(ListNode head)     {if(head==null) return null;ArrayList<Integer> list = new ArrayList<Integer>();    while(head!=null)    {    list.add(head.val);    head=head.next;    }        Integer nums[] = new Integer[list.size()];        nums = list.toArray(nums);        return sortedArrayToBST(nums);    }    public static TreeNode sortedArrayToBST(Integer[] nums)    {          if(nums==null || nums.length==0)              return null;          return helper(nums,0,nums.length-1);      }      private static TreeNode helper(Integer[] nums, int l, int r)      {          if(l>r)              return null;          int m = (l+r)/2;          TreeNode root = new TreeNode(nums[m]);          root.left = helper(nums,l,m-1);          root.right = helper(nums,m+1,r);          return root;      }}</span>

0 0