(LeetCode 面试经典 150 题) 105. 从前序与中序遍历序列构造二叉树 (二叉树、深度优先搜索dfs)

题目:105. 从前序与中序遍历序列构造二叉树

在这里插入图片描述

思路:深度优先搜索dfs

先序遍历的第一个点是当前子树的根节点,找到这个点在中序遍历的位置,那么左边就是当前子树的左子树,右边就是当前节点的右子树。

C++版本:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */classSolution{public:// a、b、c分别表示:先序遍历的左区间、中序遍历的左区间、中序遍历的右区间 TreeNode *dfs(vector<int>& preorder, vector<int>& inorder,int a,int b,int c){for(int i=b;i<=c;i++){// 到当前子树的根节点才不会跳过if(preorder[a]!=inorder[i])continue;// 当前子树的根节点 TreeNode * tmp=newTreeNode(preorder[a]);// 中序节点的左边[b,i-1]是左子树 tmp->left=dfs(preorder,inorder,a+1,b,i-1);// 中序节点的右边[i+1,c]是右子树 tmp->right=dfs(preorder,inorder,a+i-b+1,i+1,c);return tmp;}//说明当前父节点是个叶子结点returnnullptr;} TreeNode*buildTree(vector<int>& preorder, vector<int>& inorder){returndfs(preorder,inorder,0,0,inorder.size()-1);}};

JAVA版本:

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */classSolution{TreeNodedfs(int[] preorder,int[] inorder,int a,int b,int c){for(int i=b;i<=c;i++){if(preorder[a]!=inorder[i])continue;TreeNode tmp=newTreeNode(preorder[a]); tmp.left=dfs(preorder,inorder,a+1,b,i-1); tmp.right=dfs(preorder,inorder,a+i-b+1,i+1,c);return tmp;}returnnull;}publicTreeNodebuildTree(int[] preorder,int[] inorder){returndfs(preorder,inorder,0,0,inorder.length-1);}}

GO版本:

/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funcbuildTree(preorder []int, inorder []int)*TreeNode {returndfs(preorder,inorder,0,0,len(inorder)-1)}funcdfs(preorder []int,inorder []int,a int,b int,c int)*TreeNode {for i:=b;i<=c;i++{if preorder[a]!=inorder[i]{continue} tmp:=&TreeNode{Val:preorder[a]} tmp.Left=dfs(preorder,inorder,a+1,b,i-1) tmp.Right=dfs(preorder,inorder,a+i-b+1,i+1,c)return tmp }returnnil}

Read more

(长期有效)接入第三方 OpenAI 兼容模型到 GitHub Copilot

目前 GitHub Copilot 仅支持接入国外的几家模型提供商,无法直接调用 OpenAI 兼容的自定义 API 进行扩展。参考相关解决方案,我总结了一下Copilot中接入OpenAI 兼容 API 的方法。 实现方法主要分为两种: 方案一:修改 Copilot Chat 源代码 在模型选择器中新增自定义提供商选项。 方案二:API 兼容适配 将 OpenAI 兼容的自定义 API 虚拟化封装为与 Ollama 兼容的 API(运行期间占用 Ollama 端口),从而利用 Copilot 模型选择器中原生的 Ollama 选项。 方法一(目前存在问题) 具体做法可参考修改Copilot chat插件增加自定义模型提供商 这里只说一下这个方法存在的问题: 1. 官方开源的Copilot chat插件版本通常滞后于最新版,可能存在未来兼容性问题 2.

By Ne0inhk
本地项目如何上传到GitCode(ZEEKLOG官方代码仓库)

本地项目如何上传到GitCode(ZEEKLOG官方代码仓库)

🤟致敬读者 * 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 * 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 * 本地项目如何上传到GitCode(ZEEKLOG官方代码仓库) * 1. 前言 * 2. 创建远程仓库项目 * 2.1 入口 * 2.2 新建项目 * 2.3 远程项目信息填写 * 2.4 远程项目界面 * 3. 令牌配置和使用(如已配置可跳过该部分) * 3.1 令牌配置 * 3.1.1 配置入口 * 3.1.2 配置参数 * 3.1.3 保存令牌 * 3.1.4

By Ne0inhk
【AI大模型前沿】通义万相Wan2.2:阿里270亿参数巨兽开源,消费级显卡就能跑,免费平替Sora上线

【AI大模型前沿】通义万相Wan2.2:阿里270亿参数巨兽开源,消费级显卡就能跑,免费平替Sora上线

系列篇章💥 No.文章1【AI大模型前沿】深度剖析瑞智病理大模型 RuiPath:如何革新癌症病理诊断技术2【AI大模型前沿】清华大学 CLAMP-3:多模态技术引领音乐检索新潮流3【AI大模型前沿】浙大携手阿里推出HealthGPT:医学视觉语言大模型助力智能医疗新突破4【AI大模型前沿】阿里 QwQ-32B:320 亿参数推理大模型,性能比肩 DeepSeek-R1,免费开源5【AI大模型前沿】TRELLIS:微软、清华、中科大联合推出的高质量3D生成模型6【AI大模型前沿】Migician:清华、北大、华科联手打造的多图像定位大模型,一键解决安防监控与自动驾驶难题7【AI大模型前沿】DeepSeek-V3-0324:AI 模型的全面升级与技术突破8【AI大模型前沿】BioMedGPT-R1:清华联合水木分子打造的多模态生物医药大模型,开启智能研发新纪元9【AI大模型前沿】DiffRhythm:西北工业大学打造的10秒铸就完整歌曲的AI歌曲生成模型10【AI大模型前沿】R1-Omni:阿里开源全模态情感识别与强化学习的创新结合11【AI大模型前沿】Qwen2.5-Omni:

By Ne0inhk

嫌 OpenClaw 太重?ZeroClaw 重磅开源!

大家好,我是玄姐。 摘要:当 OpenClaw 的 Node.js 内存占用让你抓狂,当 Agent 的响应速度无法满足实时需求,是时候看看 Rust 带来的新选择了。ZeroClaw,一个 100% Rust 编写、极致轻量、高度模块化的 AI Agent 框架,正式开源。 过去的一个月里,OpenClaw(及其前身 Moltbot/Clawdbot)以其强大的生态和易用性,几乎成为了开源 AI Agent 的代名词。然而,随着大家在生产环境中通过 Node.js 运行越来越复杂的 Agent 工作流,一些问题也逐渐浮出水面: 资源消耗大:Node.js 运行时的内存占用在多 Agent 场景下显得捉襟见肘。

By Ne0inhk