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

分析:

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

总结:

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

相关推荐
QT 小鲜肉22 分钟前
【Linux命令大全】001.文件管理之slocate命令(实操篇)
linux·运维·服务器·数据库·笔记
AI视觉网奇40 分钟前
ue安装插件方法笔记
笔记·ue5
POLITE31 小时前
Leetcode 238.除了自身以外数组的乘积 JavaScript (Day 7)
前端·javascript·leetcode
元亓亓亓1 小时前
LeetCode热题100--64. 最小路径和--中等
算法·leetcode·职场和发展
菩提小狗2 小时前
小迪安全_第4天:基础入门-30余种加密编码进制&Web&数据库&系统&代码&参数值|小迪安全笔记|网络安全|
前端·网络·数据库·笔记·安全·web安全
努力学算法的蒟蒻2 小时前
day49(12.30)——leetcode面试经典150
算法·leetcode·面试
be or not to be2 小时前
HTML+CSS 浮动与表格全总结笔记
css·笔记·html
有一个好名字2 小时前
力扣-递增的三元子序列
算法·leetcode·职场和发展
_Kayo_2 小时前
React antd table 基础用法笔记1
笔记