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);
}

分析:

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

总结:

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

相关推荐
jyyyx的算法博客14 分钟前
LeetCode 面试题 16.18. 模式匹配
算法·leetcode
Xudde.25 分钟前
friendly靶机渗透
笔记·学习·安全·web安全·php
轻赚时代30 分钟前
PC 端 AI 图像处理工具实操指南:抠图 / 证件照优化 / 智能擦除全流程解析
图像处理·人工智能·经验分享·笔记·深度学习·创业创新·学习方法
老王熬夜敲代码43 分钟前
泛型编程的差异抽象思想
开发语言·c++·笔记
客梦1 小时前
Java教室管理系统
java·笔记
代码游侠1 小时前
学习笔记——GDB调试工具
linux·开发语言·笔记·学习
QT 小鲜肉1 小时前
【孙子兵法之中篇】007. 孙子兵法·军争篇
人工智能·笔记·读书·孙子兵法
思成不止于此1 小时前
MySQL 约束详解:保证数据完整性的核心机制
数据库·笔记·学习·mysql
摇滚侠1 小时前
零基础小白自学 Git_Github 教程,Action CI/CD 完整实践,笔记23
笔记·git·ci/cd
走在路上的菜鸟1 小时前
Android学Dart学习笔记第九节 Patterns
android·笔记·学习·flutter