当前位置: 首页 > news >正文

LeetCode每日一题:1123. 最深叶节点的最近公共祖先(2023.9.6 C++)

目录

1123. 最深叶节点的最近公共祖先

题目描述:

实现代码与解析:

dfs

原理思路:


1123. 最深叶节点的最近公共祖先

题目描述:

        给你一个有根节点 root 的二叉树,返回它 最深的叶节点的最近公共祖先 。

回想一下:

  • 叶节点 是二叉树中没有子节点的节点
  • 树的根节点的 深度 为 0,如果某一节点的深度为 d,那它的子节点的深度就是 d+1
  • 如果我们假定 A 是一组节点 S 的 最近公共祖先S 中的每个节点都在以 A 为根节点的子树中,且 A 的深度达到此条件下可能的最大值。

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4]
输出:[2,7,4]
解释:我们返回值为 2 的节点,在图中用黄色标记。
在图中用蓝色标记的是树的最深的节点。
注意,节点 6、0 和 8 也是叶节点,但是它们的深度是 2 ,而节点 7 和 4 的深度是 3 。

示例 2:

输入:root = [1]
输出:[1]
解释:根节点是树中最深的节点,它是它本身的最近公共祖先。

示例 3:

输入:root = [0,1,3,null,2]
输出:[2]
解释:树中最深的叶节点是 2 ,最近公共祖先是它自己。

提示:

  • 树中的节点数将在 [1, 1000] 的范围内。
  • 0 <= Node.val <= 1000
  • 每个节点的值都是 独一无二 的。

实现代码与解析:

dfs

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int dfs(TreeNode* cur) // 获取当前节点可到达的最大深度{if (cur == NULL) return 0;int l = dfs(cur->left);int r = dfs(cur->right);return max(l, r) + 1;}TreeNode* lcaDeepestLeaves(TreeNode* root) {int dl = dfs(root->left); // 左int dr = dfs(root->right); // 右if (dl == dr) return root;else if (dl > dr) return lcaDeepestLeaves(root->left);else return lcaDeepestLeaves(root->right);}
};

原理思路:

        只要读懂题目就很好写了。

        题目含义:其实就是返回两个最深的节点的最近的公共祖先。

        每次递归向深度大的方向递归,若深度相同,说明找到了该节点,返回即可。最深的节点如果只要一个,那就是他自己。

http://www.lryc.cn/news/156987.html

相关文章:

  • Oracle查看锁表和正在执行的Sql
  • Linux centos 卸载 ceph
  • ElementUI浅尝辄止34:Radio 单选框
  • 开始MySQL之路——MySQL三大日志(binlog、redo log和undo log)概述详解
  • router基础使用
  • 亚马逊云科技人工智能内容审核服务:大大降低生成不安全内容的风险
  • 2023年高教社杯数学建模思路 - 案例:最短时间生产计划安排
  • 算法工程题(二叉树递归)
  • “指针跃动”受邀参加全球贸易服务峰会
  • Go Web开发的高级技巧和最佳实践
  • Verilog 基础知识
  • element ui 表格组件与分页组件的二次封装
  • 递归算法学习——有效的数独,解数独
  • 基于Alexnet深度学习网络的人员口罩识别算法matlab仿真
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate
  • 如何正确的写出第一个java程序:hello java
  • 使用llvm 编译最新的linux 内核(LoongArch)
  • Using Multiple RDF Knowledge Graphs for Enriching ChatGPT Responses
  • 【Hive-小文件合并】Hive外部分区表利用Insert overwrite的暴力方式进行小文件合并
  • 位运算 |(按位或) (按位与) ^(按位异或)
  • Qt应用开发(基础篇)——复选按钮 QCheckBox 单选按钮 QRadioButton
  • AERMOD模型大气环境影响评价
  • 递归组装树结构的数据
  • 企业架构LNMP学习笔记7
  • 开店星小程序上架教程和后台Request failed with status code 500[undefined]问题处理
  • 第一百三十六回 WillPopScope组件
  • 【论文爬虫】自动将论文详细信息直送notion并自动下载(含源码)
  • Android知识点整理
  • JSON与电子表格
  • Oracle创建用户、授权视图权限