Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)
2024-10-19 22:37:22
Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)
深度优先搜索的解题详细介绍,点击
给你一个有根节点的二叉树,找到它最深的叶节点的最近公共祖先。
回想一下:
- 叶节点 是二叉树中没有子节点的节点
- 树的根节点的 深度 为
0
,如果某一节点的深度为d
,那它的子节点的深度就是d+1
- 如果我们假定
A
是一组节点S
的 最近公共祖先,<font color="#c7254e" face="Menlo, Monaco, Consolas, Courier New, monospace">S</font> 中的每个节点都在以A
为根节点的子树中,且A
的深度达到此条件下可能的最大值。
示例 1:
输入:root = [1,2,3]
输出:[1,2,3]
示例 2:
输入:root = [1,2,3,4]
输出:[4]
示例 3:
输入:root = [1,2,3,4,5]
输出:[2,4,5]
提示:
- 给你的树中将有 1 到 1000 个节点。
- 树中每个节点的值都在 1 到 1000 之间。
分析:
根据题目,需要先找到最深的叶子节点,然后求最深的叶子节点的最近公共祖先。
那么我们可以遍历这个树,发现左节点的最大高度=右节点的最大高度时,就可以直接返回这个树,如示例1.
如果高度不等,则再进入高度大的那一边继续遍历,找到左高度=右高度为止。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lcaDeepestLeaves(TreeNode root) {
if(root==null){
return null;
}
int left = depth(root.left);
int right = depth(root.right);
if(left==right){
return root;
}else if(left>right){
return lcaDeepestLeaves(root.left);
}else if(left<right){
return lcaDeepestLeaves(root.right);
} return null;
}
public int depth(TreeNode node){
if(node==null) return 0;
return 1 + Math.max(depth(node.left),depth(node.right));
} }
最新文章
- MFC下打开选择文件夹并获取文件夹的绝对路径
- pdo mysql错误:Cannot execute queries while other unbuffered queries are active
- 在类库中引用WebService的注意事件
- jquery back to top 页面底部的返回顶部按钮
- ffmpeg-20160728-bin.7z
- NSURLSession
- PostgreSQL 8.1 中文文档(转)
- 理解C#系列 / 核心C# / 编译参数
- css样式写一个三角形
- css如此强大你知道吗
- Hi3518EV200平台ADC多通道采样
- C语言程序设计第二次作业1
- Phaser文档访问不了,下载英文版文档到本地,已经共享在国内网站上面
- mysql 8.0.X 创建新的数据库、用户并授权
- codeforces675D
- 将.NET Core部署在Docker
- Windows下 OpenSSL DES加密配置
- OpenCV支持向量机(SVM)介绍
- mycat配置安装测试
- django get post files请求知识点