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));
} }

最新文章

  1. MFC下打开选择文件夹并获取文件夹的绝对路径
  2. pdo mysql错误:Cannot execute queries while other unbuffered queries are active
  3. 在类库中引用WebService的注意事件
  4. jquery back to top 页面底部的返回顶部按钮
  5. ffmpeg-20160728-bin.7z
  6. NSURLSession
  7. PostgreSQL 8.1 中文文档(转)
  8. 理解C#系列 / 核心C# / 编译参数
  9. css样式写一个三角形
  10. css如此强大你知道吗
  11. Hi3518EV200平台ADC多通道采样
  12. C语言程序设计第二次作业1
  13. Phaser文档访问不了,下载英文版文档到本地,已经共享在国内网站上面
  14. mysql 8.0.X 创建新的数据库、用户并授权
  15. codeforces675D
  16. 将.NET Core部署在Docker
  17. Windows下 OpenSSL DES加密配置
  18. OpenCV支持向量机(SVM)介绍
  19. mycat配置安装测试
  20. django get post files请求知识点

热门文章

  1. 《VR入门系列教程》之13---相机与立体渲染
  2. 云计算:Linux运维核心管理命令详解
  3. Vue中beforeRouterEnter的应用
  4. windows上使用pip下载东西时报编码错误问题解决方法
  5. canal同步MySQL数据到ES6.X
  6. spring-boot-plus集成Spring Boot Admin管理和监控应用
  7. linux杂货铺
  8. 优雅的对象转换解决方案-MapStruct使用进阶(二)
  9. [Short-Circuit Constraint Violation]警告解决办法
  10. Linux学习之自动配置部署——初用expect