【剑指Offer系列】68-二叉树的最近公共祖先(哈希)

在这里插入图片描述

思路:使用map存储每个节点的父节点,则两个节点的最近公共祖先,即二者的最近父节点

1、中序遍历二叉树(当前节点的下一个节点)
2、记录每个节点的父节点
3、列出p的族谱、q的族谱
4、寻找二者最近的祖先

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode n1, TreeNode n2) {if (n1.val == root.val || n2.val == root.val) {return root;}// 1.寻找所所有节点的父节点Map<TreeNode, TreeNode> map = new HashMap<>();findParent(map, root);// 2.n1的家谱(包括自己)List<TreeNode> n1ParentList = getPeople(map, n1);// 3.n2的家谱List<TreeNode> n2ParentList = getPeople(map, n2);// 4.n1和n2的公共长辈的第一个长辈n1ParentList.retainAll(n2ParentList);return n1ParentList.get(0);}private void findParent(Map<TreeNode, TreeNode> map, TreeNode root) {map.put(root, null);TreeNode temp = root;// 1.最左子节点while (temp.left != null) {map.put(temp.left, temp);temp = temp.left;}// 2.下一个节点TreeNode curNode = temp;while (true) {TreeNode nextNode = next(map, curNode);if (nextNode == null) {return;}curNode = nextNode;}}private TreeNode next(Map<TreeNode, TreeNode> map, TreeNode curNode) {if (curNode.right != null) {TreeNode next = curNode.right;map.put(next, curNode);while (next.left != null) {map.put(next.left, next);next = next.left;}return next;} else {TreeNode parent = map.get(curNode);while (true) {if (parent == null) {return null;} else if (parent.left != null && Objects.equals(parent.left.val, curNode.val)) {return parent;} else {curNode = parent;parent = map.get(curNode);}}}}private List<TreeNode> getPeople(Map<TreeNode, TreeNode> map, TreeNode node) {List<TreeNode> list = new ArrayList<>();while (node != null) {list.add(node);TreeNode parent = map.get(node);node = parent;}return list;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

PS系统教程31

调色之色阶 调色与通道最基本的关系通道是记录颜色最基本的信息有些图片可以用通道去改变颜色信息的说明这些图像是比较高级的PS是一款图像合成软件&#xff0c;在合成过程中需要处理大量素材&#xff0c;比如要用这些素材进行抠背景&#xff0c;就要用到图层蒙版以及Alpha通道…

Qt编程技巧总结篇(2)-信号-槽-多线程(一)

文章目录 Qt编程技巧总结篇&#xff08;2&#xff09;-信号-槽-多线程&#xff08;一&#xff09;信号与槽实例与应用 小结 Qt编程技巧总结篇&#xff08;2&#xff09;-信号-槽-多线程&#xff08;一&#xff09; 最近学习信号与槽以及多线程&#xff0c;非常有技术含量&#…

【详解】RV1106移植opencv-mobile库

文章目录 前言一、烧入镜像二、编译项目1.创建项目文件 三、移植四、运行文件五、总结 前言 硬件&#xff1a;瑞芯微Rv1106【Luckfox Pro\Max Pico、网线一根、USB线、串口助手、摄像头 软件&#xff1a;ubuntu 20.4 编译器&#xff1a;arm-rockchip830-linux-uclibcgnueabihf…

人工智能——常用数学基础之线代中的矩阵

1. 矩阵的本质&#xff1a; 矩阵本质上是一种数学结构&#xff0c;它由按照特定规则排列的数字组成&#xff0c;通常被表示为一个二维数组。矩阵可以用于描述一组数据&#xff0c;或者表示某种关系&#xff0c;比如线性变换。 在人工智能中&#xff0c;矩阵常被用来表示数据集…

【单片机与嵌入式】stm32串口通信入门

一、串口通信/协议 &#xff08;一&#xff09;串口通信简介 串口通信是一种通过串行传输方式在电子设备之间进行数据交换的通信方式。它通常涉及两条线&#xff08;一条用于发送数据&#xff0c;一条用于接收数据&#xff09;&#xff0c;适用于各种设备&#xff0c;从微控制…

Spring中利用重载与静态分派

Spring中利用重载与静态分派 在Java和Spring框架中&#xff0c;重载&#xff08;Overloading&#xff09;和静态分派&#xff08;Static Dispatch&#xff09;是两个非常重要的概念&#xff0c;它们在处理类方法选择和执行过程中扮演着关键角色。本文旨在深入探讨Spring环境下…

入选顶会ICML,清华AIR等联合发布蛋白质语言模型ESM-AA,超越传统SOTA

作为细胞内无数生化反应的驱动力&#xff0c;蛋白质在细胞微观世界中扮演着建筑师和工程师的角色&#xff0c;不仅催化着生命活动&#xff0c;更是构筑、维系生物体形态与功能的基础构件。正是蛋白质之间的互动、协同作用&#xff0c;支撑起了生命的宏伟蓝图。 然而&#xff0…

Ubuntu DNS服务配置 深度解析

测试方法 resolvectl status dig alidns.com 修改实践 直接用接口配置&#xff0c;没用 /etc/resolv.conf&#xff0c;有效 /etc/netplan/01-network-manager-all.yaml,无效 /etc/systemd/resolved.conf&#xff0c;见link&#xff0c;为全局配置 [Resolve] DNS1.1.1.1 Fa…

Adobe Premiere 视频编辑软件下载安装,pr全系列分享 轻松编辑视频

Adobe Premiere&#xff0c;自其诞生之日起&#xff0c;便以其卓越的性能和出色的表现&#xff0c;稳坐视频编辑领域的王者宝座&#xff0c;赢得了无数专业编辑人员与广大爱好者的青睐。这款强大的视频编辑软件&#xff0c;凭借其丰富的功能和灵活的操作性&#xff0c;为用户提…

2024年道路运输安全员(企业管理人员)备考题库资料。

46.危险货物道路运输随车携带的单据&#xff0c;下列选项不属于的是&#xff08;&#xff09;。 A.道路运输危险货物安全卡 B.运单或者电子运单 C.道路危险货物运输从业资格证 D.车辆检测报告 答案&#xff1a;D 47.危险货物运输驾驶人员在24小时内实际驾驶车辆时间累计不…

ROS2在rviz2中实时显示轨迹和点

本文是将《ROS在rviz中实时显示轨迹和点》博客中rviz轨迹显示转为ROS2环境中的rviz2显示。 ros2的工作空间创建这里就不展示了。 包的创建 ros2 pkg create --build-type ament_cmake showpath --dependencies rclcpp nav_msgs geometry_msgs tf2_geometry_msgsshowpath.cpp…

Windows批处理入门:快速掌握批处理脚本的基本技巧

一、前言 在Windows操作系统中&#xff0c;批处理文件&#xff08;Batch File&#xff09;是一种非常实用的工具&#xff0c;它允许用户通过简单的命令行脚本来自动化各种任务。无论是系统管理员、开发人员&#xff0c;还是普通用户&#xff0c;掌握批处理文件的基本知识都能极…

【漏洞复现】和丰多媒体信息发布系统 QH.aspx 任意文件上传漏洞

0x01 产品简介 和丰多媒体信息发布系统也称数字标牌&#xff08;Digital Signage&#xff09;&#xff0c;是指通过大屏幕终端显示设备&#xff0c;发布商业、财经和娱乐信息的多媒体专业视听系统&#xff0c;常被称为除纸张媒体、电台、电视、互联网之外的“第五媒体”。该系…

Ansible如何控制playbook的执行顺序

对 Ansible 剧本资源打标签 在处理大型或复杂的剧本时,如果只希望运行部分剧本或部分任务。可以将标签应用于可能要跳过或运行的特定资源。 通过标签来标记资源,在资源上使用tags关键字,然后是要应用的标记列表。在Ansible中tags标记可用于下列资源&#xff1a; 每个任务,这…

1-4.时间序列数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

信息学奥赛初赛天天练-41-CSP-J2021基础题-n个数取最大、树的边数、递归、递推、深度优先搜索应用

PDF文档公众号回复关键字:20240701 2021 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 4.以比较作为基本运算&#xff0c;在N个数中找出最大数&#xff0c;最坏情况下所需要的最少比…

我在中东做MCN,月赚10万美金

图片&#xff5c;Photo by Ben Koorengevel on Unsplash ©自象限原创 作者丨程心 在迪拜购物中心和世界最高建筑哈利法塔旁的主街上&#xff0c;徐晋已经“蹲”了三个小时&#xff0c;每当遇到穿着时髦的年轻男女&#xff0c;他都会上前询问&#xff0c;有没有意愿成为…

【计算机网络】常见的网络通信协议

目录 1. TCP/IP协议 2. HTTP协议 3. FTP协议 4. SMTP协议 5. POP3协议 6. IMAP协议 7. DNS协议 8. DHCP协议 9. SSH协议 10. SSL/TLS协议 11. SNMP协议 12. NTP协议 13. VoIP协议 14. WebSocket协议 15. BGP协议 16. OSPF协议 17. RIP协议 18. ICMP协议 1…

网页自动化测试开发中记录pytest

1切换cmd文件目录C:\Users\14600>D: D:\>cd D:\worksoftware D:\worksoftware>2单个py文件打包成.exe文件1.pyinstaller -F -c (项目主文件)test_01shouye.py 该路径下存在文件名&#xff0c;主项目文件 test_01shouye.py 2.执行spec文件&#xff1a; pyinstaller -F …