题目传送: ​​https://leetcode.cn/problems/convert-sorted-list-to-binary-search-tree/​

运行效率

Leetcode109. 有序链表转换二叉搜索树_链表


代码如下:

class Solution {
public TreeNode sortedListToBST(ListNode head) {
//1、先想办法把链表里面的数 存储到数组中
List<Integer> list = new ArrayList<>();
while (head!=null){
list.add(head.val);
head=head.next;
}
Integer[] array = list.toArray(new Integer[0]);
//2、然后再通过递归的方式来解决问题
TreeNode helper = helper(array, 0, array.length - 1);
return helper;
}


public TreeNode helper(Integer[] nums,int start,int end){
//处理边界情况
if(start>end){
return null;
}
if(start==end){
TreeNode treeNode = new TreeNode(nums[start]);
return treeNode;
}
//中间节点的位置
int mid =(start+end)/2;
//以中间位置的数 生成根节点
TreeNode root = new TreeNode(nums[mid]);
//递归构建左子树
TreeNode leftChild = helper(nums, start, mid-1);
//递归构建右子树
TreeNode rightChild = helper(nums, mid + 1, end);
root.left=leftChild;
root.right=rightChild;
return root;
}
}