您的位置:首页 > 其它

[LeetCode]Convert Sorted List to Binary Search Tree

2014-07-10 14:54 316 查看

题目描述

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

给定一个已排好序的链表,构建其相应的二叉搜索树。

解题思路

看到题目,映入眼帘的肯定是递归方法:

找到待构建链表的中间位置,将其对应的treeNode提出作为根节点(root);
构建中间位置左边链表的BST,返回结果作为root.left;
构建 中间位置的右边链表的BST,返回结果作为root.right;

代码实现中,我没有直接操作链表,而是首先根据linked list生成对应的ArrayList<TreeNode>,然后对ArrayList<TreeNode>进行递归求解,具体解法请看下面代码。

代码

/**
* 根据已排序列表构建二叉搜索树
* @param head
* @return
*/
public static TreeNode sortedListToBST(ListNode head) {
ArrayList<TreeNode> list = new ArrayList<TreeNode>();

if(head==null)
return null;

//通过链表的值构建treenode并存储到list中
while (head != null) {
list.add(new TreeNode(head.val));
head = head.next;
}

return buildBST(0, list.size() - 1, list);
}


/**
* 构建二叉搜索树
* @param start 待构建二叉树的treeNode列表的起始位置
* @param end 待构建二叉树的treeNode列表的结束位置
* @param list
* @return
*/
public static TreeNode buildBST(int start, int end, ArrayList<TreeNode> list) {
int middle = start + (end - start) / 2;//中间节点
TreeNode root = list.get(middle);

if(start==end){
return root;
}

if (middle - 1 >= start) {
root.left = buildBST(start, middle - 1, list);
}

if (middle + 1 <= end) {
root.right = buildBST(middle + 1,end, list);
}
return root;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: