题目要求:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
给定一个排好序的链表,转换成二叉搜索树
思路:和108题类似,先遍历链表元素,存储到数组中,把数组中间的元素作为根节点,数组左边的元素是左子树,右边的元素是右子树,递归创建左子树右子树。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
if(head==null)
{
return null;
}
ArrayList<Integer> arr = new ArrayList<Integer>();
while(head!=null)
{
arr.add(head.val);
head = head.next;
}
return buildnode(arr,0,arr.size()-1);
}
//建立树
public TreeNode buildnode(ArrayList<Integer> arr,int start,int end)
{
if(start<=end)
{
int mid = (start+end)/2;
TreeNode node = new TreeNode(arr.get(mid));
node.left = buildnode(arr,start,mid-1);
node.right=buildnode(arr,mid+1,end);
return node;
}
return null;
}
}