给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
示例:
给定的有序链表: [-10, -3, 0, 5, 9],
一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
0<br /> / \<br /> -3 9<br /> / /<br /> -10 5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
思路:
按照中序遍历的思路进行分治
复杂度分析:
时间复杂度O(n) 设长度为 n 的链表构造二叉搜索树的时间为 T(n),递推式为T(n)=2⋅T(n/2)+O(1),根据主定理,T(n) = O(n)。
空间复杂度O(logn)
var sortedListToBST = function(head) {
const getBSTLen = (head) =>{
let count = 0;
while(head){
count++;
head = head.next;
}
return count;
}
const helper = (left,right) => {
if(left > right) return null;
let mid = (left+right) >>> 1;
let root = new TreeNode();
root.left = helper(left,mid-1);
root.val = ptr.val;
ptr = ptr.next;
root.right = helper(mid+1,right);
return root;
}
let ptr = head;
let len = getBSTLen(head);
return helper(0,len-1);
};