AcWing 18. 重建二叉树(前序+中序)

treetime:带时间戳的系统发育和祖先重建的最大似然推断 TreeTime:最大似然定年和祖先序列推断 概述 TreeTime提供了用于祖先序列重建和分子钟系统发生学推论的例程,即一棵树,其中所有分支都按比例缩放,使得末端节点的位置对应于其采样时间,内部节点位于最可能的发散时间。 为了优化时间尺度系统发育的可能性,TreeTime使用一种迭代方法,该方法首先根据给定的树的分支长度来推断祖先序列,然后优化时间轴上不受约束的节点的位置,然后重复此循环。 唯一的拓扑优化是(可选)解析多面体的方式,这种方式与树上的采样时间约束最(近似)一致。 该软件包旨在用作命令行上的独立工具,或用作较大的系统发育分析工作流程中使用的库。 。 除了脚本TreeTime或经由命令行使用它,也有在一个小型Web服务器 。 看看我们的和。 特征 祖先序列重建(边缘和联合最大似然) 分子时钟树推论(边际和联合最大似然) GTR模型的推论 重生以最大化时间信号并优化根尖 立即下载

常规的做法是先从先序遍历序列中选出根节点,然后再由中序遍历序列得到左右子树节点,最后递归重建二叉树。具体的做法是:首先,先序遍历序列的第一个元素一定是根节点元素;然后,在中序遍历序列中找到此元素的位置,此时该位置左侧的元素排序为根节点的左子树的中序遍历,右侧的元素排序为根节点的右子树的中序遍历。由左子树和右子树的节点个数可以对先序遍历序列进行进一步划分,假设左子树的中序遍历序列的长度是l,则在前序遍历序列中,根节点后面的 l个元素的排列是左子树的前序遍历,剩下的元素的排列是右子树的前序遍历。由此就可以递归重建二叉树了。

如果还不明白可以参考题解。

具体代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    unordered_map<int, int> pos; //记录中序遍历向量中元素到其在向量中位置的映射
    
    TreeNode *connect(vector<int>& preorder, int pl, int pr, vector<int>& inorder, int il, int ir){
        if(pl > pr) return NULL;
        TreeNode *root = new TreeNode(preorder[pl]);
        int k = pos[preorder[pl]] - il; //子树根节点在中序遍历向量中的位置
        root -> left = connect(preorder, pl + 1, pl + k, inorder, il, il + k - 1);
        root -> right = connect(preorder, pl + k + 1, pr, inorder, il + k + 1, ir);
        return root;
    }
    
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        int n = preorder.size();
        for(int i = 0; i < n; i++) pos[inorder[i]] = i;
        return connect(preorder, 0, n - 1, inorder, 0, n - 1);
    }
};

值得注意的是,在查找子树根节点元素在中序遍历向量中的位置的时候没有使用查找函数。而是建立了一个由中序遍历向量中元素到其在向量中位置的映射(或哈希)。由于题目提示所有元素均是互异的,因此不必担心发生冲突。而且正由于此映射的存在,使得该算法的时间复杂度降为O(n)。

另外,同理我们还能得到后序+中序重构二叉树的算法,代码大同小异。

RLC电阻电容电感基础知识——电感篇 电感 等效电路 电感线圈由铜导线绕制,等效电路如图所示。 寄生电阻RS,包括了绕线电阻、引脚串联电阻以及磁芯损耗电阻三部分组成,其中绕线电阻与线径、长度、铜线电阻率有关;引脚电阻与引线长短、粗细有关;磁芯损耗电阻与磁芯材料特性有关,显然磁芯损耗电阻还与工作频率有关.寄生电容C主要是绕线圈与圈之间的杂散电容(为PF级),与绕线工艺有关。 等效导纳 显然: (1)当角频率ω(频率f)较小时,呈电感性. (2)当角频率ω等于ω0时,导纳Y虚部为0,呈现电阻性,即发生共振。令导纳Y虚部为0,即可求出共振角频率ω 阅读详情

相关推荐

TL3562/3568内核驱动移植实战:解决无锡沐创N500L-AM4网口异常问题

本文详细介绍了在TL3562/3568平台上移植无锡沐创N500L-AM4网卡驱动的实战经验,重点解决了第四个网口通讯异常问题。通过升级驱动版本至rnpgbe-0.2.3,生成关键头文件并正确配置内核,最终实现四个网口稳定工作。文章还提供了性能优化建议和避坑指南,为类似硬件驱动移植项目提供参考。

weixin_28273593的博客 180

祖先祖先基因组重建研究

生物信息学-祖先基因组重建

qq_45936325的博客 2410

WorkBuddy入门到 多Agent团队协作完全指南(附实操代码与配图)

WorkBuddy的Agent Teams功能支持多智能体协作,通过创建AI团队提升复杂任务处理效率。该功能支持自然语言创建团队、任务分配与依赖管理、成员间消息通信(包括直接消息和广播),并提供任务审批机制。典型应用场景包括软件开发、内容创作等协作任务。环境要求WorkBuddy 2026年3月及以上版本,支持Windows和macOS系统。用户可快速创建包含不同角色的AI团队,通过共享任务列表和信箱系统实现协作。高级功能包括委派模式、任务依赖管理和成员自主认领等,适合各类协作场景。

三棱球的专栏 6455

二叉树-重构(CPP实现简单易懂图解含有先序 + 后序的重建算法)

通过先序序列中的第二个元素可以找到左子树的根结点并且可以求出左子树的长度从而可以找到先序序列和后序序列中的左子树序列,然后递归调用,用整体长度减去左子树长度就可以求出右子树长度从而可以找到先序序列和后序序列中的右子树序列,然后递归调用,直到退化为长度为1的情况,并将其赋值,左右子树设置为NULL,返回根结点,重建二叉树完成。通过后序遍历序列找到根结点, 以此找到根结点在中序遍历结点中的位置,然后递归调用函数,设置其左子节点为递归调用左子树, 设置其右子节点为递归调用右子树。

CODER-GODV的博客 736

用deepseek部署全自动的机器人--bytebot

Bytebot是一款开源AI桌面代理,提供完整的虚拟桌面环境,支持跨应用任务处理、文件管理、文档处理等复杂工作流。其技术架构包含核心控制、LLM代理、UI等组件,支持Docker和Kubernetes部署。本文演示了基于CloudStudio的部署流程,包括环境配置、Docker部署及DeepSeek API集成,实现多模型调用功能。

Kin 2481

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1129

祖先序列重建结合机器学习改进双键还原酶-文献精读87

烯还原酶(EREDs)是一类催化C═C键不对称还原的酶,在药物化合物的大规模合成中具有潜在应用价值。然而,由于它们在工艺条件下通常不稳定,其作为生物催化剂的应用受到限制。先前的研究通过祖先序列重建(ASR)这一生物信息学方法解决了这一问题。ASR 基于一组同源序列预测进化祖先序列,从而找到稳定化的 EREDs。在本研究中,我们尝试应用 ASR 设计酶库,并利用机器学习预测最稳定的酶库变体。我们生成了一个基于 ASR 预测中不确定性定位残基的 ERED 酶库。

weixin_44874487的博客 2225

高渗透率光伏接入配电网的电压越限与谐波治理:基于VSG构网型控制与SVG+APF联合补偿的Simulink仿真研究

本文针对高渗透率光伏接入配电网引发的电压越限和谐波畸变问题,提出了一种分层递进的综合治理方案。通过建立IEEE 33节点配电网的Simulink仿真模型,首先验证了传统跟网型控制下光伏渗透率提高导致的电压越上限(最高达1.08 p.u.)和系统谐波畸变严重(THD达8.72%)问题。进而提出:1)将部分光伏逆变器改造为构网型VSG控制,利用其无功调压能力与虚拟阻抗技术实现本地治理;2)在关键节点加装SVG+APF联合补偿装置进行全局动态无功补偿与谐波滤除。仿真结果表明,该方案能将节点电压控制在0.94-1.

huanghm88的专栏 579

使用祖先序列重建设计高功能热稳定蛋白

来自:微生物代谢工程与合成生物学Lab商业化生物催化剂需要能够承受高温和长时间孵育的鲁棒性酶。祖先酶的重建表明,寒武纪前的酶通常比现存形式的热稳定性更好。来自昆士兰大学的Yosephin Gumulya等人在《Nature catalysis》上发表了题为“Engineering highly functional thermostable proteins using ancestral seq...

悟道西方 1010

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操

可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。

一键难忘的博客 4050

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1483

AcWing 18 重建二叉树

题目描述: 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下...

昂昂累世士的博客 202

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29

购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。

嵌入式阿齐Archie 3864

AcWing 18. 重建二叉树

题目描述 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下...

renee_rsbsx的博客 198

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

AcWing 18. 重建二叉树

题目描述 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下...

yj_coder的博客 244

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ACWING18. 重建二叉树(剑指offer)

输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下所示: 3 / 9 ...

tomjobs的博客 378

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【题解】【AcWing】18. 重建二叉树

18. 重建二叉树 原题传送:AcWing 18. 重建二叉树 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, null] 返回的二叉树如下所示: 3 /\ 9 20 /\ 15 7 思路:

葑鈊丶 180

使用unordered_map<int,int> 重建二叉树-acwing

【代码】使用unordered_map<int,int> 重建二叉树-acwing。

2401_87338545的博客 307

【ACWing】18. 重建二叉树

题目地址: https://www.acwing.com/problem/content/23/ 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 数据范围: 树中节点数量范围[0,100][0,100][0,100]。 参考https://blog.csdn.net/qq_46105170/article/details/105898563。代码如下: #include <vector> #include &

数学、算法爱好者的博客 156

acwing 18. 重建二叉树

经典题目 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: map<int, int> hash;

weixin_44070289的博客 189

剑指offer7 重建二叉树

剑指offer6-AcWing-18. 重建二叉树 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中每个节点的值都互不相同; 输入的前序遍历和中序遍历一定合法; 样例 给定: 前序遍历是:[3, 9, 20, 15, 7] 中序遍历是:[9, 3, 15, 20, 7] 返回:[3, 9, 20, null, null, 15, 7, null, null, null, ...

WangXu__的博客 179

剑指Offer打卡day5—— AcWing 18. 重建二叉树

【题目描述】 AcWing 18. 重建二叉树 【思路】 前序遍历确定了根节点,在中序遍历序列中根节点左边的数是以该节点为根的左子树集合,右边的数为右子树集合。如此递归划分确定左右子树范围(左子树范围:[pl, pr], 右子树范围:[il, ir]),直至前序遍历中所有根节点都被访问过,即pl > pr。 /** * Definition for a binary tree node. * class TreeNode { * int val; * TreeNod

JohnnyLin 156

AcWing18:重建二叉树(Java实现)

18题目: 根据前序遍历和中序遍历,求二叉树 思路: 递归思想比较容易想,主要是递归过程中的对于前序遍历和中序遍历剩余数组边界的确定 /** * Definition for a binary tree node. * class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution {

qq_40180352的博客 181

剑指 offer acwing 18 重建二叉树(DFS)

题面 题解 前置知识 :遍历方式是根据 根节点 的位置分类的 ,前序遍历(根左右)中序遍历(左根右) 后序遍历(左右根),对于树的层次遍历 ,就是按找BFS的方式遍历,在每个叶子节点后加一个NULL (如图中方式) 给定前序和中序,我们就可以dfs递归确定一颗树,就拿图中样例来看,首先前序(根左右),那么3肯定是根节点,那么看中序遍历的3所在位置,因为中序遍历是左根右,所以3之前的9是左子树 ,3之后的 15 20 7 是右子树 右子树的前序遍历第一个是20 ,那么20就是右子树的根节

qq_44791484的博客 196

AcWing 18. 重建二叉树(C++)- dfs

题目链接:https://www.acwing.com/problem/content/description/23/ 题目如下: 思路: 写法一:y总 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(

qq_40467670的博客 254

《剑指offer》

14. 不修改数组找出重复的数字 给定一个长度为 n+1 的数组nums,数组中所有的数均在 1∼n 的范围内,其中 n≥1。 请找出数组中任意一个重复的数,但不能修改输入的数组。 样例 给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。 返回 2 或 3。 思考题:如果只能使用 O(1) 的额外空间,该怎么做呢? class Solution { public...

skyline的分享专栏 302
上一篇: AcWing 17. 从尾到头打印链表(递归+栈)
下一篇: AcWing 19. 二叉树的下一个节点(中序遍历的后继结点)
Zee_Chao
博客等级 码龄11年 168粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值