难度:中等

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

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

    示例:

    1. 给定的有序链表: [-10, -3, 0, 5, 9],
    2. 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:
    3. 0
    4. / \
    5. -3 9
    6. / /
    7. -10 5

    解题思路:
    遍历链表将值存入数组,递归构建每个子树。将数组从最中间项分割得到三个部分:子数组1,中间项,子数组2。将中间项作为当前节点的val,对子数组1和子数组2分别递归执行原方法,得到的两个子树分别作为上一个节点的左子树与右子树

    1. var sortedListToBST = function(head) {
    2. let cur = head;
    3. let arr = [];
    4. while (cur) {
    5. arr.push(cur.val);
    6. cur = cur.next;
    7. }
    8. function BTS(data) {
    9. if (!data.length) return null;
    10. const root = new TreeNode(null);
    11. let min = Math.floor(data.length / 2);
    12. root.left = BTS(data.slice(0, min));
    13. root.val = data[min];
    14. root.right = BTS(data.slice(min + 1));
    15. return root;
    16. }
    17. return BTS(arr);
    18. };