LintCode-578: Lowest Common Ancestor III

IEC 61851-24:2023 电动汽车导电充电系统 - 第24部分:直流电动汽车供电设备与电动汽车之间的数字通信,用于控制直流充电 - 完整英文电子版(110页) IEC 61851-24:2023 与 IEC 61851-23 共同适用于直流电动车供电设备与电动道路车辆(EV)之间的数字通信,用于控制导电直流电力传输,额定电源电压最高可达1000伏交流电或最高1500伏直流电,额定输出电压最高可达1500伏直流电。 立即下载
  1. Lowest Common Ancestor III
    中文English
    Given the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes.
    The lowest common ancestor is the node with largest depth which is the ancestor of both nodes.
    Return null if LCA does not exist.

Example
Example1

Input:
{4, 3, 7, #, #, 5, 6}
3 5
5 6
6 7
5 8
Output:
4
7
7
null
Explanation:
4
/
3 7
/
5 6

LCA(3, 5) = 4
LCA(5, 6) = 7
LCA(6, 7) = 7
LCA(5, 8) = null

Example2

Input:
{1}
1 1
Output:
1
Explanation:
The tree is just a node, whose value is 1.
Notice
node A or node B may not exist in tree.
Each node has a different value

这题我感觉不算简单。
注意:
1) 因为是找最小祖先,所以递归最远的那个节点如果找到,必须把自身传上来。
2)注意root是A或B的情形。
3)找到A的条件是: 左子树找到A || 右子树找到A || root就是A。
找到B的条件是: 左子树找到B || 右子树找到B || root就是B。
4)如果二叉树里面只有A或只有B的时候,可以返回NULL吗?不行,因为这和二叉树里面没有A也没有B的情况没法区分。
5)这题也可以用Taijan算法(traverse),可能面试用不上,下次学习一下。

代码如下:

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */



class Solution {
public:
    /*
     * @param root: The root of the binary tree.
     * @param A: A TreeNode
     * @param B: A TreeNode
     * @return: Return the LCA of the two nodes.
     */

    TreeNode * lowestCommonAncestor3(TreeNode * root, TreeNode * A, TreeNode * B) {
        ReturnType ret = helper(root, A, B);
        if (ret.findA && ret.findB) 
            return ret.node;
        else
            return NULL;
    }

private:

    struct ReturnType {
        bool findA;
        bool findB;
        TreeNode* node;
        ReturnType(bool a=false, bool b=false, TreeNode* c=NULL) : findA(a), findB(b), node(c) {} 
    };
    
    ReturnType helper(TreeNode* root, TreeNode* A, TreeNode* B) {
        if (!root) 
            return ReturnType();
        
        ReturnType leftRet = helper(root->left, A, B);
        ReturnType rightRet = helper(root->right, A, B);
        
        bool findA = leftRet.findA || rightRet.findA || root == A;
        bool findB = leftRet.findB || rightRet.findB || root == B;
        
        if (A == root || B == root) {
            return ReturnType(findA, findB, root);
        }
        
        //now find A and find B, and we know it is not overlapping with root 
        if (leftRet.node && rightRet.node) {
            return ReturnType(true, true, root);   //写成   return ReturnType(findA, findB, root); 也可以
        }

        if (leftRet.node) {
            return ReturnType(findA, findB, leftRet.node);
        }
        
        if (rightRet.node) {
            return ReturnType(findA, findB, rightRet.node);    
        }
        
        return ReturnType(false, false, NULL);
    }
    
};

解法2:其实这题可以直接判断A和B是不是都在tree中,若是,直接递归查找。否则,就返回NULL就可以了。

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */


class Solution {
public:
    /*
     * @param root: The root of the binary tree.
     * @param A: A TreeNode
     * @param B: A TreeNode
     * @return: Return the LCA of the two nodes.
     */
    TreeNode * lowestCommonAncestor3(TreeNode * root, TreeNode * A, TreeNode * B) {
        if (!root || !findNode(root, A) || !findNode(root, B)) return NULL;
        return helper(root, A, B);
    }

private:
    bool findNode(TreeNode * root, TreeNode * node) {
        if (!root) return false;
        if (root == node) return true;
        return findNode(root->left, node) || findNode(root->right, node);
    }
    
    TreeNode * helper(TreeNode * root, TreeNode * A, TreeNode * B) {
        if (!root || root == A || root == B) return root;
        TreeNode * leftFind = helper(root->left, A, B);
        TreeNode * rightFind = helper(root->right, A, B);
        if (leftFind && rightFind) return root;
        return leftFind ? leftFind : rightFind;
    }
};

代码同步在
https://github.com/luqian2017/Algorithm

Linux下的段错误(Segmentation fault)产生的原因及调试方法(经典) 立即下载

相关推荐

【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现)

内容概要:本文针对电容式触摸传感器在金属基材上应用时易受干扰的问题,提出一种基于半数值模型的仿真分析方法,用于精确计算带状电容器在金属背景下的电容变化。研究通过构建合理的物理模型,结合电磁场理论与数值计算技术,在Matlab平台上实现代码仿真,有效克服金属环境对传感器性能的负面影响,提升其在复杂材料表面工作的稳定性和灵敏度,具有良好的工程应用前景。该方法不仅适用于基础研究,也可为实际产品中抗干扰触摸传感器的设计提供理论依据和技术支撑。; 适合人群:具备电磁场与微波技术基础知识及Matlab编程能力,从事传感器设计、人机交互设备开发、嵌入式系统研发等相关领域的高校研究生、科研人员和工程技术人员。; 使用场景及目标:①开展电容式触摸传感器在金属基材上的集成与优化设计;②掌握半数值建模与仿真方法在电磁传感系统中的应用;③为工业环境下高抗扰触摸器件的研发提供仿真验证手段与设计指导。; 阅读建议:此资源强调物理建模与数值仿真的紧密结合,建议读者结合电磁学原理深入理解边界条件设置、介质分布建模与电场求解过程,并动手运行Matlab代码,调试参数以观察电容响应特性,从而全面提升对传感器工作机制与仿真分析能力的掌握。

LeetCode 算法:二叉树的最近公共祖先 III c++

LeetCode 算法:二叉树的最近公共祖先 III c++

世界那么大,我想去看看~【随心更新,看世界去了😄】 1602

【顶级EI复现】基于KKT条件与分段解析优化的双有源桥DC-DC变换器软开关协同最小应力闭环控制方法(Simulink仿真实现)

内容概要:本文提出了一种基于KKT条件与分段解析优化的双有源桥DC-DC变换器软开关协同最小应力闭环控制方法,旨在实现高效、高可靠性的电力转换。该方法通过建立精确的电路数学模型,结合KKT最优性条件进行分段解析优化,有效协调零电压/零电流软开关实现条件与功率器件电压电流应力之间的矛盾,在确保宽范围软开关的前提下显著降低器件的电气应力,从而提升系统效率与寿命。文中详细阐述了控制策略的理论推导过程,并在Simulink平台上构建了完整的闭环仿真模型,验证了该方法在动态响应速度、转换效率优化及器件应力抑制等方面的优异性能,是对高水平EI期刊研究成果的高质量复现; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员,以及从事DC-DC变换器控制算法开发的工程师;适用于具备扎实电路拓扑分析能力与现代控制理论基础的专业技术人员; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与关键控制挑战;②掌握将非线性优化问题转化为KKT条件求解的方法及其在电力电子系统中的实际应用;③学习如何通过分段解析策略实现多目标(软开关与低应力)协同优化控制;④复现并拓展EI级论文中的先进控制算法,支撑科研创新与工程实践; 阅读建议:建议读者结合提供的Simulink仿真模型,逐步跟进理论推导与控制逻辑实现过程,重点关注KKT条件的引入方式、边界约束处理及闭环控制器设计细节,同时可尝试将该优化思想迁移至其他隔离型DC-DC变换器拓扑中进行对比验证,以深化对先进优化控制策略的理解与应用能力。

LintCode 578 Lowest Common Ancestor III

思路 基本与LCA那题类似,判断树根和子树,只是需要额外保存A,B节点是否在node的子树中存在的信息。使用ResultType来保存该信息。 复杂度 时间复杂度O(n) 空间复杂度O(n) 代码 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNo...

我要上岸的博客 164

无刷直流电机(BLDCM)转速电流双闭环控制、三相桥式星型全控电机研究(Simulink仿真实现)

内容概要:本文围绕无刷直流电机(BLDCM)的转速电流双闭环控制系统展开深入研究,重点基于Matlab/Simulink平台构建三相桥式星型全控电路的高精度仿真模型,实现对电机运行状态的精确控制。研究系统性地对比了传统PID控制与模糊PID控制策略在动态响应速度、抗干扰能力、稳态精度及鲁棒性等方面的性能差异,深入剖析电流环与转速环的协同作用机制。同时,文章进一步引入无位置传感器控制技术与滑模观测器(SMO),有效解决了机械传感器带来的成本与可靠性问题,提升了系统的集成度与工程实用性。所提供的多个仿真模型(含模糊神经网络PID等高级控制策略)为控制算法的验证与优化提供了可复现的技术路径,仿真结果可为电机驱动系统的工业设计与科研创新提供坚实的理论依据和技术支撑。; 适合人群:自动化、电气工程、电力电子与电机控制等相关专业的本科生、研究生,以及从事电机驱动系统研发、新能源汽车、工业自动化等领域工作的工程师和技术人员。; 使用场景及目标:①掌握无刷直流电机双闭环控制系统的建模、仿真与调试全流程;②深入理解并实践传统PID与模糊PID控制器的设计原理与参数整定方法;③探究无位置传感器控制与滑模观测器等先进估测技术的实现机理;④为毕业设计、科研课题、课程项目或工业级电机控制器开发提供可直接借鉴的仿真基础与解决方案。; 阅读建议:建议读者结合Matlab/Simulink环境进行动手实践,按照文档指引逐步搭建模型,重点观察不同控制策略下的系统响应曲线,深入分析控制参数变化对性能的影响,并鼓励在此基础上拓展研究如负载突变、参数摄动等复杂工况下的控制策略优化。

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8604

Lowest Common Ancestor III

Given the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes. The lowest common ancestor is the node with largest depth which is the ancestor of both nodes. R

ncst 437

避坑指南:STM32F4的ADC采样FSR传感器,如何稳定读数并校准压力值?

本文详细解析了STM32F4的ADC采样FSR薄膜压力传感器时遇到的读数不稳定和非线性校准问题,提供了从硬件配置到软件滤波的完整解决方案。通过优化ADC设置、改进滤波算法和实施分段线性校准,帮助工程师实现高精度压力测量,特别适用于智能手套和医疗监测等应用场景。

weixin_28675839的博客 273

Lowest Common Ancestor III java 走地牙

/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left =...

yangzhuhappy的博客 191

科普:Frenet坐标

理想情况下,描述这种常见驾驶行为在数学上应该很容易。一种方法是使用新的坐标系。现在,而不是放下一个正常的笛卡尔网格,我们做一些事情,就像你看到下面…Frenet Coordinates是一种以比传统x,y笛卡尔坐标更直观的方式表示道路位置的方式。如果我们想要方程式来描述这个动作,那就不容易了!想象一下像下面这样一条弯曲的道路,笛卡尔坐标系就位于它的上面…使用这些笛卡尔坐标,我们可以尝试描述车辆通常在路上行驶的路径…那么在Frenet坐标系下呈现的典型轨迹是什么样的?在这里,我们定义了一个新的坐标系统。

OceanStar的博客 1万+

一文读懂医疗大模型测评基准

面对市场上浩若星海的大模型,医院管理者如何采购适合自身场景的解决方案?如何选取好的模型作为基础进行课题研究?都是医院需要特别重视的问题。评测基准则benchmark是这些问题的重要解法,国内北京、上海、浙江已然开展了相关的标准化工作。

dz102的博客 1832

LintCode 578. 最近公共祖先 III (Lowest Common Ancestor III) Python题解

Given the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes. The lowest common ancestor is the node with largest depth which is the ancestor of both nodes. Ret...

zjy997的博客 310

【保姆级教程】教你如何轻松获取MIMIC数据使用权限

文章非常详细地介绍了MIMIC数据库申请使用的全部步骤。

越努力 越幸运 6598

*lintcode578- Lowest Common Ancestor III- medium

Given the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes.The lowest common ancestor is the node with largest depth which is the ancestor of both nodes.Retur...

weixin_30699831的博客 132

10种电阻综合对比——《器件手册--电阻》

可变电阻在电子设备中也有很多用途,如在收音机的音量调节电路中,通过旋转可变电阻的旋钮来改变电路中的电阻值,从而改变通过扬声器的电流,实现音量的调节。根据电阻定律,电阻R = ρ(L/S),其中ρ是导体材料的电阻率,L是导体的长度,S是导体的横截面积。比如,同样材料制成的两根电线,粗的电线电阻比细的电线电阻小,长的电线电阻比短的电线电阻大。电流采样电阻的工作原理基于欧姆定律,即电阻两端的电压与通过电阻的电流成正比,公式为 I = V/R,其中 I是电流,V是电阻两端的电压,R 是电阻值。

XU157303764的博客 3138

SerDes系列之 SSC扩频时钟技术

扩频时钟,又称展频(SSC-Spread Spectrum Clocking),当前PCIE、DDR、USB等几乎所有的高速接口都支持SSC的功能。电子工程师在日常的电气测试中经常与之接触,在电磁传导和辐射发射验证过程中,经常需要使用到芯片的SSC功能,它的物理表现形式,就是信号的比特率会在一个很小的范围内浮动,多见于周期性变化的时钟信号。

一只豌豆象的博客 3440

[LintCode] 578 Lowest Common Ancestor III 解题报告

DescriptionGiven the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes.The lowest common ancestor is the node with largest depth which is the ancestor of both ...

weixin_30925411的博客 146

黑猫带你学eMMC协议第9篇:eMMC初始化过程(initial)

本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 文章为个人辛苦整理,付费内容,禁止私自转载。 文章所在专栏:《黑猫带你学:eMMC协议详解》 1 什么是emmc的初始化 对于小白来说,可能不太明白什么是emmc初始化。举个栗子:当你拿到一个电脑,接上电源,是不是就立马可以用了呢?并不是吧,你还需要去开机,等待电脑启动,配置完各种参数,等出现了电脑桌面,你才能用。那么同样,对于emmc芯片来说,也不是提供电源就能用了,需要输入各种命令后,让其进入到tran state后,才能正.

黑猫奥利奥的博客 6738

[PAT] c++ 1143. Lowest Common Ancestor (30)

题目 The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U and V as descendants. A binary search tree (BST) is recursively defined as a binary tree which ...

沧海漂游的博客 2085

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

1143. Lowest Common Ancestor (30)

1143. Lowest Common Ancestor (30) jnxxhzz 分类: PAT  2018-03-19 06:36:34 所属标签 PAT 甲级1143. Lowest Common Ancestor (30)【分析】【代码】1143. Lowest Common Ancestor (30)The lowest common ancestor (LCA) of two node...

jnxxhzz的博客 1725

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

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

【LintCode】578. 最近公共祖先 III

描述 给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。 两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节点。 返回 null 如果两个节点在这棵树上不存在最近公共祖先的话。 这两个节点未必都在这棵树上出现。 每个节点的值都不同 样例 样例1 输入: {4, 3, 7, #, #, 5, 6} 3 5 5 6 6 7 5 8...

刘猿猿 264

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lintcode阶梯训练第三关(九章)

595、Binary Tree Longest Consecutive Sequence 题目 Given a binary tree, find the length of the longest consecutive sequence path. The path refers to any sequence of nodes from some starting node to any

Dashuai_Liu的博客 1613

【三次过】Lintcode 578. 最近公共祖先 III

给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。 两个节点的最近公共祖先,是指两个节点的所有父亲节点中(包括这两个节点),离这两个节点最近的公共的节点。 返回null如果两个节点在这棵树上不存在最近公共祖先的话。 样例 给出下面这棵树: 4 / \ 3 7 / \ 5 6 LCA(3, 5) =4 LCA(5, 6) =7 LC...

majichen95的博客 521
上一篇: LintCode-902: Kth Smallest Element in a BST
下一篇: LintCode-95: Validate Binary Search Tree (BST经典题)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值