二叉树构造——前序和中序数组
原题在这里:
给两个数组表示前序和中序遍历结果,按此构造二叉树并返回根节点。
analyse:
前序定根,中序分左右,铁板版的我写错了数组名字,瞎搞半小时浪费时间
code:
class Solution { vector<int> pre, mid; int x; int find(int l, int r) { while (l < r && pre[x] != mid[l]) l++; return l; } TreeNode *mk(int l, int r) //当前pre根节点位置为x,那么在mid序列中,找x位置,左右即为子树 { //构造当前子数区间为l,r if (x >= pre.size() || l > r) return nullptr; int y = find(l, r); //当前在mid[l,y-1]+[y+1,r] TreeNode *n = new TreeNode(pre[x++]); n->left = mk(l, y - 1); n->right = mk(y + 1, r); return n; } public: TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { pre = preorder, mid = inorder; x = 0; //先序定根,中序分左右 return mk(0, pre.size() - 1); } };
【Over】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!