题目:
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>