给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    示例:

    给定的有序链表: [-10, -3, 0, 5, 9],

    一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:

    1. 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);
    };