有序链表转换二叉搜索树|刷题打卡

124 阅读1分钟

每日算法 -- 链表

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

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

分析

  1. 链表求中间数可以用快慢指针,但是将链表一分为二进行递归操作,好像有一些其他的问题
  2. 最开始是给了头尾节点来控制,但是出问题了
  3. 最后时间不够了,只能链表 -> 数组 -> BST , 属于讨巧的做法
// 109. 有序链表转换二叉搜索树
// https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/


/**
 * @分析
 * 1. 没有做出用链表转二叉树的方法
 * 2. 链表 -> 数组 -> BST
 * 3. 根据 BST 的特性,求出中点作为根节点,数组左侧的值为左树,右侧的点位右树,递归下去即可
 */
var sortedListToBST = function (head) {
    const arr = []
    while (head) {
        arr.push(head.val)
        head = head.next
    }
    const recursion = (arr) => {
        if (!arr.length) return null
        const mid = Math.floor(arr.length / 2)
        const root = new TreeNode(arr[mid])
        root.left = recursion(arr.slice(0, mid))
        root.right = recursion(arr.slice(mid + 1))
        return root
    }
    return recursion(arr)
};

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情