leetcode做题笔记109. 有序链表转换二叉搜索树

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

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

思路一:递归+双指针

cpp 复制代码
struct ListNode* getMedian(struct ListNode* left, struct ListNode* right) {
    struct ListNode* fast = left;
    struct ListNode* slow = left;
    while (fast != right && fast->next != right) {
        fast = fast->next;
        fast = fast->next;
        slow = slow->next;
    }
    return slow;
}

struct TreeNode* buildTree(struct ListNode* left, struct ListNode* right) {
    if (left == right) {
        return NULL;
    }
    struct ListNode* mid = getMedian(left, right);
    struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val = mid->val;
    root->left = root->right = NULL;
    root->left = buildTree(left, mid);
    root->right = buildTree(mid->next, right);
    return root;
}

struct TreeNode* sortedListToBST(struct ListNode* head) {
    return buildTree(head, NULL);
}

分析:

本题给定一个链表的头节点求二叉搜索树,与上题相同,先找根节点,再将左右子树通过递归的方式补充完整,利用双指针的方法让快指针先到链表结尾再将中间的值赋给二叉树来创建二叉搜索树,最后输出二叉树根节点

总结:

本题考察二叉搜索树与链表的综合应用,利用双指针找到根节点即可解决

相关推荐
凉、介1 小时前
Armv8-A virtualization 笔记 (二)
笔记·学习·嵌入式·arm·gic
智者知已应修善业2 小时前
【ICL8038芯片正弦波三角波方波发生器电路】2024-1-5
驱动开发·经验分享·笔记·硬件架构·硬件工程
探序基因3 小时前
身高与基因的关系
笔记
Liangwei Lin3 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
llhm5 小时前
tsp学习笔记——LINUX SDK编译2(2)Kernel6.1 Linux
linux·笔记·学习
YL200404265 小时前
047从前序与中序遍历序列构造二叉树
算法·leetcode
wangcheng3038 小时前
关键词优化怎么理解最清楚
笔记
如竟没有火炬8 小时前
字符串相乘——int数组转字符串
开发语言·数据结构·python·算法·leetcode·深度优先
土星碎冰机9 小时前
ai自学笔记(3.安卓篇,制作app
android·笔记·ai
土星碎冰机9 小时前
ai自学笔记 (2.prompt 踩坑与优化)
笔记·ai·prompt·claude