# 【Day 9】 有序链表转换二叉搜索树

# 题目描述

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

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

示例:

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

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

      0
     / \

-3 9
/ /
-10 5  
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

# 我的回答

# 解法一

# 时空复杂度


# 参考回答

二叉搜索树性质

对于树中任意一个点,当前节点的权值必然大于所有左子树节点的权值 同理,当前节点的权值必然小于所有右子树节点的权值 因为给的链表是有序的,

以链表中点为根 中点左边的值都小于它,可以构造左子树, 同理构造右子树 循环第一步 因为链表访问中点的时间复杂度为 O(n), 所以可以使用数组将链表的值存储,以空间换时间

var sortedListToBST = function(head) {
    let res = []
    while(head){
        res.push(head.val)
        head = head.next
    }

    return run(res)
};

function run(res){
    if(res.length == 0) return null
    let mid = parseInt(res.length / 2)
    let root = new TreeNode(res[mid])
    root.left = mid > 0 ? run(res.slice(0, mid)) : null
    root.right = mid >= res.length - 1 ? null : run(res.slice(mid + 1))
    return root
}

作者:ZStar01 链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/solution/di-gui-yi-ba-suo-by-zstar01/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 12/22/2022, 9:53:26 AM