栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

LeetCode 0109.有序链表转换二叉搜索树 - 链表中值为根,中值左右分别为左右子树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 0109.有序链表转换二叉搜索树 - 链表中值为根,中值左右分别为左右子树

【LetMeFly】109.有序链表转换二叉搜索树 - 链表中值为根,中值左右分别为左右子树

力扣题目链接:https://leetcode.cn/problems/convert-sorted-list-to-binary-search-tree/

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

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

 

示例 1:

输入: head = [-10,-3,0,5,9]
输出: [0,-3,9,-10,null,5]
解释: 一个可能的答案是[0,-3,9,-10,null,5],它表示所示的高度平衡的二叉搜索树。

示例 2:

输入: head = []
输出: []

 

提示:

  • head 中的节点数在[0, 2 * 104] 范围内
  • -105 <= Node.val <= 105
方法一:链表中值为根,中值左右分别为左右子树

这题与LeetCode 0108.将有序数组转换为二叉搜索树类似。

区别是本题将0108的有序数组变成了有序链表。

因此我们仍然采用LeetCode 0108的思路,并用哈希表记录一下链表的第几个元素的值是多少即可。

具体方法请参考https://letmefly.blog.csdn.net/article/details/125610878

  • 时间复杂度 O ( n ) O(n) O(n),其中 n n n是数组中元素的个数。
  • 空间复杂度 O ( log ⁡ n ) O(log n) O(logn),取决于递归栈的深度。
AC代码 C++
class Solution {
private:
    unordered_map ma;

    TreeNode* build(int l, int r) {  // [l, r)
        if (l >= r)
            return nullptr;
        int mid = (l + r) >> 1;
        TreeNode* root = new TreeNode(ma[mid]);
        root->left = build(l, mid);
        root->right = build(mid + 1, r);
        return root;
    }

public:
    TreeNode* sortedListToBST(ListNode* head) {
        int th = 0;
        while (head) {
            ma[th++] = head->val;
            head = head->next;
        }
        return build(0, th);
    }
};

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125691471

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号