面试经典(5)--二叉树最低公共祖先LCA

2023-11-12

题目:输入二叉树的俩个节点,求它们的最低公共祖先

算法分析:我们直接来分析O(n)的算法。


比如求节点F和节点H的最低公共祖先,先求出从根节点A到F的路径,再求出A到H的路径,那么最后一个相同的节点就是最低公共祖先。A->B->D->F和A->B->E->H,最后相同的节点事B,所以最低公共祖先是B节点。求根节点到指定节点的算法先前已经更新过了,复杂度是O(n),所以总的时间复杂度是O(n)。

获取从根节点到指定节点的函数代码:

struct BinaryNode
{
	char value;
	BinaryNode *left;
	BinaryNode *right;
};
求跟节点到指定节点路径:

bool GetNodePath(BinaryNode *pRoot,BinaryNode *pNode,vector<BinaryNode*> &v)
{
	if(pRoot==NULL)
		return false;
	v.push_back(pRoot);
	if(pRoot==pNode)
		return true;
	bool found=GetNodePath(pRoot->left,pNode,v);
	if(!found)
		found=GetNodePath(pRoot->right,pNode,v);
	if(!found)
		v.pop_back();
}

求最低公共祖先节点:

BinaryNode* GetCommonParent(BinaryNode *pRoot,BinaryNode *pNode1,BinaryNode *pNode2)
{
	if(pRoot==NULL || pNode1==NULL || pNode2==NULL)
		return NULL;
	vector<BinaryNode*> v1,v2;
	GetNodePath(pRoot,pNode1,v1);
	GetNodePath(pRoot,pNode2,v2);
	BinaryNode *pLast=pRoot;
	vector<BinaryNode*>::iterator ite1=v1.begin();
	vector<BinaryNode*>::iterator ite2=v2.begin();
	while(ite1!=v1.end() && ite2!=v2.end())
	{
		if(*ite1==*ite2)
			pLast=*ite1;
		ite1++;
		ite2++;
	}
	return pLast;
}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试经典(5)--二叉树最低公共祖先LCA 的相关文章

  • 树的广度优先遍历

    树的广度优先遍历原理 树的广度优先遍历就是对每一层的节点依次访问 一层访问结束后进入下一层 直到遍历完所有节点 每个节点只访问一次 树的广度优先遍历我们可以利用队列先进先出的特点来实现 代码实现 ArrayList
  • 如何将内存图像数据封装成QImage V1

    如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时 势必会遇到采集内存图像并进行处理 如缩放 旋转 操作 如果能够将内存图像数据封装成QImage 则可以利用QImage强大的图像处理功能来进行图像处理 并能很好的进行显
  • 660-34(数1、2)

    目录 题目 解题思路 考察知识点推导 参考链接 题目 解题思路 考点是参数方程的一阶导 二阶导和曲率公式 另外就是曲率的公式 要牢记 详细解题过程在下面的b站链接中 考察知识点推导 1 参数方程一阶导 运用了链式法则和反函数求导 根据x与t
  • Linux Top查看指定进程的CPU状态

    查看top帮助信息 不管linux还是unix 大多数命令都是支持man命令来查看帮助信息的 语法是下面这样 进入到交互界面后 用法类似vi 然后按 q 可以退出 输入 再输入关键字 可以查询相关关键字 man top 帮助信息回显 TOP
  • 华为OD机试 - 食堂供餐 - 二分查找(Java 2023 B卷 考生抽中题)

    目录 一 题目描述 二 输入描述 三 输出描述 四 补充说明 五 解题思路 六 Java算法源码 七 效果展示 1 输入 2 输出 3 说明 华为OD机试 2023B卷题库疯狂收录中 刷题点这里 一 题目描述 某公司员工食堂以盒饭的方式供餐
  • python 图像相减的不同方法

    对于图像相减采用如下方法进行结果对比 本案例中采用灰度图像 gray img jpg 如下 gray cur jpg如下 不同算法图像相减之后得结果 1 采用矩阵直接相减 diff gray cur gray pre 结果很不好 有很多噪点

随机推荐

  • wo 27s虚拟服务器,联通光猫wo-27s设置上网

    联通光猫wo 27s怎么设置上网呢 填写上网账号和密码那栏 要输入光猫的超级管理页面 http 192 168 1 1 CU html 输入管理员用户名和密码 CUAdmin 密码相同 也有不相同的 具体视设备参数 进入管理页面以后 点击基
  • -bash:findstr: command not found

    项目场景 在CentOS7 6 上部署公司的一个系统 问题描述 执行命令报错 keytool list keystore app jdk11Openj9 lib security cacerts storepass changeit fin
  • Centos7安装Gitlab

    安装GithLab 1 安装必要依赖 sudo yum install y curl policycoreutils python openssh server perl sudo systemctl enable sshd sudo sy
  • Sublime text 3 如何格式化HTML/css/js代码

    使用Sublime text 3 编写代码是一种享受 使用Sublime text 3 格式化HTML代码 需要安装插件 具体安装步骤如下 1 打开菜单 gt 首选项 gt 插件控制 输入 install package 2 等待程序进入插
  • DoS攻击

    原文 1 DoS攻击 DoS攻击 Denial of Service 拒绝服务攻击 通过消耗计算机的某种资源 例如计算资源 网络连接等 造成资源耗尽 导致服务端无法为合法用户提供服务或只能提供降级服务 在SDN网络的集中式架构中 控制器是天
  • 医学图像分割评判标准及程序代码

    文章目录 1 图像分割指标 2 两个问题 3 IOU和假阳性率 4 准确率 Accuracy 精确率 Precision 召回率 Recall 和F1 Measure 参考资源 1 https blog csdn net zichen zi
  • 关于获取项目在tomcat中的路径问题

    1 直接发请求 可以用下面的方式 ServletContext context ServletRequestAttributes RequestContextHolder getRequestAttributes getRequest ge
  • 如何安装管式土壤墒情监测仪?

    安装说明 在安装时 需选择地势相对较高且平坦的位置进行安装 这样即能防止雨水倒灌进设备内部从而引起设备短路或线路故障 还能保证监测数据的精准度 首先 我们先使用土钻竖直于地面进行打孔保证传感器放入 取出都比较顺畅 直到孔深与传感器所标识的安
  • 程序员如何培养领导力

    第一阶段 熟悉自己的业务 知道问题在哪里 怎样可以解决 领导者是给大家指方向的 你必须先知道要走哪个方向 才能带领别人 这是领导力的基础 第二阶段 培养说服能力 能说服他人 问题可以按照你说的方式解决 领导力的表现是 他人愿意服从你 这不能
  • 比较流行的编程语言

    流行的编程语言 1 C C语言诞生于1972年 可以称之为现代高级语言的鼻祖 由著名的贝尔实验室发明 C语言是人们追求结构化 模块化 高效率的 语言之花 在底层编程 比如嵌入式 病毒开发等应用 可以替代汇编语言来开发系统程序 在高层应用 也
  • MOS管应用之外接电源和电池供电的的双电源自动切换电路

    现在大部分电子产品都配有锂电池 在没有外接电源的时候 使用锂电池进行供电 当外接电源的时候 使用外部电源供电 同时对锂电池充电 因此要求电路必须具备能够根据是否接有外部电源 而自动选择相应供电电源的能力 常见的简单电源切换电路如图1所示 但
  • 16.echarts X轴像直尺一样设置刻度

    在做老师的项目的时候 老师让我们实现X轴的直尺刻度显示 网上查了查相关代码 大家都没有明确介绍 因此我在这里记录一下 自己的学习 先看实现效果 对echarts的xAxis yAxis这两个属性进行修改即可实现 xAxis 第一个 是原X轴
  • nodeMCU(ESP8266)和RC522的接线图

    文章目录 nodeMCU ESP8266 和RC522的接线图 参考文章 nodeMCU引脚图 nodeMCU 和 RC522接线图 示例代码 nodeMCU ESP8266 和RC522的接线图 参考文章 这篇应该是别人从国外论坛翻译过来
  • 腾讯翻译软件推荐

    相信大家学编程的时候 经常会需要进行官方文档的查阅 但是大部分的官方文档都是英文的 对于英文不是很好的朋友不是很友好 当然 如果英文较好的朋友最好尝试看英文 毕竟在写代码的时候翻译软件会把代码中的英文也翻译出来 下面我推荐一款腾讯翻译软件给
  • Web前端——HTML中的列表、表格、表单

    一 列表
  • 数据挖掘与数据分析的主要区别

    本文来自网易云社区 百科是这样定义数据挖掘和数据分析的 数据分析 是指用适当的统计分析方法对收集来的大量数据进行分析 提取有用信息和形成结论而对数据加以详细研究和概括总结的过程 这一过程也是质量管理体系的支持过程 在实用中 数据分析可帮助人
  • Java集合框架之Set集合简介

    和List集合一样 Set集合也是属于单列集合 同属于Collcetion集合体系下 List和Set都是单列集合 但是他们是存在区别的 List 有序 元素可重复的单列集合 Set 无序 元素不可重复的单列集合 Set和List集合一样属
  • idea移除许可证

    目录 一 介绍 二 操作步骤 一 介绍 当自己的idea日期要到了 又想续上 但是覆盖不了之前的日期 新的没办法生效 那么就要把原先的许可证先移除 再重新续上新的 二 操作步骤 1 点击idea的右上角的这个展开 2 选择帮助 点击注册 3
  • 算法➡数学问题

    文章目录 进制转换 最大公约数与最小公倍数 最大公约数 素数 判断素数 素数表的获取 质因子分解 大数运算 大数乘法 几何问题 由三点的坐标求所构成的三角形的面积 判断点是否在三角形内 集合问题 子集问题 数学归纳法 回溯法 全排列 进制转
  • 面试经典(5)--二叉树最低公共祖先LCA

    题目 输入二叉树的俩个节点 求它们的最低公共祖先 算法分析 我们直接来分析O n 的算法 比如求节点F和节点H的最低公共祖先 先求出从根节点A到F的路径 再求出A到H的路径 那么最后一个相同的节点就是最低公共祖先 A gt B gt D g