IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 有序链表转换成二叉搜索树 C语言 -> 正文阅读

[数据结构与算法]有序链表转换成二叉搜索树 C语言

题目描述:

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

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

解题思路:

对于高度平衡二叉树对每个结点都要满足左右子树的高度差绝对值不超过1。我们可以将链表的中间结点作为根节点建立二叉树,左侧和右侧的结点分别作为左孩子和右孩子,然后递归建立整个二叉树。
这样建成的二叉树对于每一个结点,其左右子树的高度差绝对值不超过1。

  • 使用快慢指针寻找链表的中间结点
    快指针fast 和 慢指针slow先指向表头left。在循环体中,fast一次走两步,slow一次走一步,相当 于在相同的时间里,fast的速度时slow速度的两倍,则slow走的路程就是fast的一半,所以slow指向链 表的中间结点。
//寻找中间结点   快慢指针法
struct ListNode *findMidNode(struct ListNode *left,struct ListNode *right)
{
    struct ListNode *slow,*fast;
    slow = fast = left;
    while(fast != right && fast->next != right)			//快指针一次走两步  慢指针一次走一步
    {
        fast = fast->next->next;
        slow = slow->next;
    }
    return slow;				//最后慢指针会指向链表的中间
}

//建树   递归法
struct TreeNode * buildTree(struct ListNode *left,struct ListNode *right)
{
    if(left == right)
        return NULL;
    struct TreeNode *root = malloc(sizeof(struct TreeNode));			//根节点
    struct ListNode *mid = findMidNode(left,right);					//链表的中间结点
    root->val = mid->val;
    root->left = buildTree(left,mid);				//左孩子
    root->right = buildTree(mid->next,right);				//右孩子
    return root;
}   

struct TreeNode* sortedListToBST(struct ListNode* head){
    return buildTree(head,NULL);
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:37:13  更:2021-08-29 09:39:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/25 0:24:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码