新闻详情

新闻详情

首页 / 资讯中心 / 详情

DeepSeek LeetCode 105. 从前序与中序遍历序列构造二叉树 C语言实现

发布时间:2026/11/15 1:42:19来源:尧图网络
DeepSeek    LeetCode 105. 从前序与中序遍历序列构造二叉树 C语言实现
思路前序遍历顺序[根, 左子树…, 右子树…]第一个元素一定是根。中序遍历顺序[左子树…, 根, 右子树…]根将中序序列分为左右两部分。递归构造从前序取第一个元素作为根。在中序中找到根的位置 mid则左子树节点数为 mid - inL。根据左子树节点数切分前序区间递归构造左右子树。为了快速定位根在中序中的位置使用数组映射因为题目节点值范围是 -3000 到 3000实现 O(1) 查找。整体时间复杂度 O(n)。代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */// 辅助递归函数structTreeNode*build(intpreL,intpreR,intinL,intinR,int*preorder,int*inorder,int*indexMap){if(preLpreR){returnNULL;}introotValpreorder[preL];structTreeNode*root(structTreeNode*)malloc(sizeof(structTreeNode));root-valrootVal;root-leftNULL;root-rightNULL;// 根在中序中的位置intmidindexMap[rootVal3000];intleftSizemid-inL;// 递归构造左右子树root-leftbuild(preL1,preLleftSize,inL,mid-1,preorder,inorder,indexMap);root-rightbuild(preLleftSize1,preR,mid1,inR,preorder,inorder,indexMap);returnroot;}structTreeNode*buildTree(int*preorder,intpreorderSize,int*inorder,intinorderSize){// 建立中序索引映射值范围 [-3000, 3000]intindexMap[6001];for(inti0;i6001;i){indexMap[i]-1;}for(inti0;iinorderSize;i){indexMap[inorder[i]3000]i;}returnbuild(0,preorderSize-1,0,inorderSize-1,preorder,inorder,indexMap);}关键点数组映射加速查找节点值范围固定用 val 3000 作为下标数组大小 6001。区间为闭区间前序 [preL, preR]中序 [inL, inR]终止条件 preL preR。左子树节点数leftSize mid - inL。前序区间划分· 左子树[preL 1, preL leftSize]· 右子树[preL leftSize 1, preR]中序区间划分· 左子树[inL, mid - 1]· 右子树[mid 1, inR]内存分配每个节点 mallocLeetCode 不要求释放。示例走一遍preorder [3,9,20,15,7]inorder [9,3,15,20,7]· 根 3mid 1leftSize 1· 左子树前序 [9]中序 [9] → 节点 9· 右子树前序 [20,15,7]中序 [15,20,7]· 根 20mid 1leftSize 1· 左子树前序 [15]中序 [15] → 节点 15· 右子树前序 [7]中序 [7] → 节点 7得到3 / \ 9 20 / \ 15 7复杂度· 时间复杂度O(n)每个节点访问一次映射查找 O(1)。· 空间复杂度O(n)递归栈最坏 O(n)映射数组 O(1)固定 6001。易错点· 忘记初始化 indexMap 为 -1导致未映射的值被误用。· 偏移量写错如写成 3001 或数组大小不足。· 区间边界计算错误尤其是 leftSize 和前序右子树起点。· 如果节点值范围超出 [-3000, 3000]此方法会越界。此时应改用哈希表或二分查找。· C 语言中不能嵌套定义函数辅助函数需定义在外部并将 indexMap 作为参数传递。· 空树情况若 preorderSize 0直接返回 NULL本代码递归中已处理。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/14 3:51:47

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/12 23:59:09

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/14 3:51:43

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉