我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/description/
题目描述:
知识点:递归
思路:将链表转换为数组,再按LeetCode108——将有序数组转换为二叉搜索树的思路递归构建树
时间复杂度是O(n),其中n为链表中的节点个数。空间复杂度是O(logn)。
JAVA代码:
public class Solution {
public TreeNode sortedListToBST(ListNode head) {
List<Integer> list = new ArrayList<>();
ListNode cur = head;
while(null != cur){
list.add(cur.val);
cur = cur.next;
}
return sortedArrayToBST(list);
}
private TreeNode sortedArrayToBST(List<Integer> list) {
TreeNode treeNode = null;
if(list.size() == 0) {
return treeNode;
}
int mid = list.size() / 2;
treeNode = new TreeNode(list.get(mid));
List<Integer> leftNums = new ArrayList<>();
for (int i = 0; i < mid; i++) {
leftNums.add(list.get(i));
}
List<Integer> rightNums = new ArrayList<>();
for (int i = mid + 1; i < list.size(); i++) {
rightNums.add(list.get(i));
}
treeNode.left = sortedArrayToBST(leftNums);
treeNode.right = sortedArrayToBST(rightNums);
return treeNode;
}
}
LeetCode解题报告: