您的位置:首页 > 其它

转换有序链表成二叉搜索树

2014-03-08 21:06 351 查看
题目原型:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: