题目原型:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
基本思路:
先将链表中的数存入数组,转化成有序数组转换为二叉搜索树,对于一个有序数组先找到中间值作为根,左边的为左子树,右边的为右子树,以此递归即可。
public TreeNode sortedListToBST(ListNode head) {
if(head==null)
return null;
int len = 0;
ListNode p = head;
while(p!=null)
{
len++;
p = p.next;
}
int[] num = new int[len];
p = head;
int i = 0;
while(p!=null)
{
num[i++] = p.val;
p = p.next;
}
TreeNode root = sortedArrayToBST(num);
return root;
}
public TreeNode sortedArrayToBST(int[] num)
{
TreeNode head = null;
if(num.length==0)
return null;
head = creatBST(num, 0, num.length-1);
return head;
}
public TreeNode creatBST(int[] num,int begin,int end)
{
if(begin>end)
return null;
else
{
int mid = (begin+end)/2;
TreeNode parent = new TreeNode(num[mid]);
parent.left = creatBST(num, begin, mid-1);
parent.right = creatBST(num, mid+1, end);
return parent;
}
}