新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/25 20:26:26来源:尧图网络
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/9/25 21:00:19

美育浸润赋能成长,产教融合聚力育人

为深入贯彻党的二十大关于加快建设教育强国的战略部署,全面落实《教育部关于全面实施学校美育浸润行动的通知》精神,以浸润作为美育工作的目标和路径,将美育融入人才培养各环节,近日,智慧建造学院成功举办名家艺术专题…

阅读更多 →
排序算法复杂度实战解析:超越大O的硬件级性能真相 2026/9/25 21:00:00

排序算法复杂度实战解析:超越大O的硬件级性能真相

1. 为什么“十大经典排序算法的复杂度分析”不是背公式,而是工程师的底层肌肉记忆你有没有过这样的经历:面试官刚问完“快排平均时间复杂度是多少”,你脱口而出“O(n log n)”,话音未落,对方紧接着一句:“那…

阅读更多 →
Nemotron-3-Diarization完全指南:NVIDIA开放权重说话人分离模型如何搞定8人会议的谁在何时说话 2026/9/25 21:00:00

Nemotron-3-Diarization完全指南:NVIDIA开放权重说话人分离模型如何搞定8人会议的谁在何时说话

Nemotron-3-Diarization完全指南:NVIDIA开放权重说话人分离模型如何搞定8人会议的谁在何时说话 【免费下载链接】Nemotron-3-Diarization 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization Nemotron-3-Diarization 是 NVIDIA 于…

阅读更多 →
搭建私人导航页:把常用内网入口放在一个页面 2026/9/25 20:59:53

搭建私人导航页:把常用内网入口放在一个页面

内网服务多了,最容易忘的往往不是密码,而是“这次应该打开哪个 IP、哪个端口”。把地址记在聊天记录里,用时还要翻找。不如做一个简单的导航页:常用入口排成几张卡片,连接内网穿透工具后,打开页面就能点进去…

阅读更多 →
G.8273.2边界时钟测试:纳秒级时频同步的生存能力验证 2026/9/25 20:59:53

G.8273.2边界时钟测试:纳秒级时频同步的生存能力验证

1. 这不是“测个时间”那么简单:G.8273.2边界时钟测试到底在测什么?ITU-T G.8273.2,这个编号看起来像一串密码,但对通信、电力、金融、广电这些对时间精度有“强迫症”的行业来说,它就是一把标尺,一把量度整…

阅读更多 →
Kubernetes agent调度CLI工具ax:gRPC通信与调度实战 2026/9/25 20:59:53

Kubernetes agent调度CLI工具ax:gRPC通信与调度实战

1. 从"ax"这个标题说起:一个被低估的CLI工具命名逻辑第一次看到"ax"这个标题,很多人会一头雾水。两个字母,没有上下文,没有说明,甚至连项目正文都是空的。但如果你在Kubernetes和agent开发这个圈子…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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