一、算法思路:
本节主要为最近公共祖先,算法利用的为递归的方式,总体思路就是先从根节点出发,然后判断根节点的子节点是否包含需要寻找最近公共祖先的左右节点,如果包含的话则往下一层继续寻找,具体的思路可以分成如下几步:

    1. 先判断根节点是否为空,如果为空的话即返回空
    1. 在判断根结点是否为左右节点的其中一个,如果是,那么这个根节点就必为最近公共祖先
    1. 如果不满足1,2说明最近公共祖先在根节点的左右子树中,因此分别递归遍历根节点的左右子树
      Treenode left=lowestCommonAncestor(root.left,p,q);
      Treenode right=lowestCommonAncestor(root.right,p,q);
    1. 如果左右子树都不为空,说明待求的左右节点分别分布在左右子树中,因此这个节点就是最近的公共祖先
      如果左右子树都为空,说明不存在最近公共祖先,所以要返回空
      如果左子树或右子树为空,那么说明待求的左右节点包含在左子树或者右子树中,因此往左/右子树搜索即可

*参考链接:https://www.cnblogs.com/diShuiZhiYi/p/14465770.html

二、代码

/** 本节主要为最近公共祖先,算法利用的为递归的方式,总体思路就是先从根节点出发,然后* 判断根节点的子节点是否包含需要寻找最近公共祖先的左右节点,如果包含的话则往下一层继续寻找* 具体的思路可以分成如下几步:* 1) 先判断根节点是否为空,如果为空的话即返回空* 2) 在判断根结点是否为左右节点的其中一个,如果是,那么这个根节点就必为最近公共祖先* 3) 如果不满足1,2说明最近公共祖先在根节点的左右子树中,因此分别递归遍历根节点的左右子树*         Treenode left=lowestCommonAncestor(root.left,p,q);*        Treenode right=lowestCommonAncestor(root.right,p,q);* 4) 如果左右子树都不为空,说明待求的左右节点分别分布在左右子树中,因此这个节点就是最近的公共祖先*     如果左右子树都为空,说明不存在最近公共祖先,所以要返回空*         如果左子树或右子树为空,那么说明待求的左右节点包含在左子树或者右子树中,因此往左/右子树搜索即可**参考链接:https://www.cnblogs.com/diShuiZhiYi/p/14465770.html**/
public class _最近公共祖先 {static class TreeNode{int val;TreeNode left;TreeNode right;TreeNode(int x) {val=x;}};static TreeNode lowestCommonAncestor(TreeNode root,TreeNode left,TreeNode right) {if(root==null) return null;if(root==left||root==right) return root;TreeNode left1=lowestCommonAncestor(root.left,left,right);TreeNode right1=lowestCommonAncestor(root.right,left,right);if(left1!=null&&right1!=null) {return root;}if(left1==null&&right1==null) {return null;}return left1==null?right1:left1;};public static void main(String []args) {TreeNode head=new TreeNode(1);TreeNode left=new TreeNode(2);TreeNode right=new TreeNode(3);TreeNode left1=new TreeNode(4);TreeNode right1=new TreeNode(5);head.left=left;head.right=right;left.left=left1;left.right=right1;TreeNode lowestcommonancestor=lowestCommonAncestor(head,left1,right1);System.out.print(lowestcommonancestor.val);}
}

Java算法学习13——最近公共祖先相关推荐

  1. 算法学习:最近公共祖先

    最近公共祖先 1.暴力算法 复杂度:O(m * logn)(最大O(n * m)); 先记录每个层数,再对层数高的依次向上移动,直到找到相同祖先,此处不写代码 2.倍增思想 复杂度:O(nlog(n) ...

  2. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  3. 最长公共子序列算法 java,算法学习——java实现最长公共子序列,

    算法学习--java实现最长公共子序列学习--java实现最长公共子序列的算法, 实验目的: 输入两个同类型的序列,用动态规划的方法计算它们最长的公共子序列的长度和序列. (推荐教程: Java视频教 ...

  4. 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...

  5. 算法-二叉树的最近公共祖先

    题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 思路:可能的情况有两种,如下图: 贴上代码: public class LowestCommonAncestor {@Testpubli ...

  6. Java算法学习:java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制)

    java进制转换(十进制转八进制,十进制转二进制,十六进制转八进制) 这几天在复习C语言的数据结构栈和队列那一章的时候,看到利用栈的特性FILO实现的进制转换十分简洁 想起了java中实现栈的操作十分 ...

  7. [hiho 13]最近公共祖先 一

    题目描述 由于这个跟后几周是一个系列,这周的做法比较简单. 把第一个人的所有祖先做标记,第二个人向上查找祖先直到找到一个标记过的节点或无法继续为止. 代码其实没什么意思. import java.ut ...

  8. 迭代法移动盘子java,算法学习--日记(牛顿迭代法)

    牛顿迭代法 概念理解 牛顿迭代法可以使用函数极限角度无限迭代趋近于某一点理解. 迭代算法解决问题,需要做好3个方面的工作: 确定迭代变量 在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由 ...

  9. 算法学习 - 最长公共子序列(LCS)C++实现

    最长公共子序列 最长公共子序列的问题很简单,就是在两个字符串中找到最长的子序列,这里明确两个含义: 子串:表示连续的一串字符 . 子序列:表示不连续的一串字符. 所以这里要查找的是不连续的最长子序列, ...

最新文章

  1. 训练不出结果_智能训练仪:专业化智能防控近视训练设备
  2. ASP.NET Atlas学习团队建议收集
  3. SQL-18 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by...
  4. Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
  5. node 生成随机头像_微信头像新玩法?二次元头像自己捏,每款都独一无二
  6. springboot开启redis共享session设置过期时间
  7. Windows 下 Redis 的下载和安装
  8. git clone 指定分支的内容
  9. 请查收,一份让你年薪突破20W的Python爬虫笔记!
  10. java确认rabbitmq_RabbitMQ的消息确认模式
  11. Lethean结点搭建
  12. Javaweb面试题整理
  13. php jmail 乱码,Jmail发送邮件与带附件乱码解决办法分享
  14. 程序员常用英语单词汇总
  15. 掌上单片机实验室 — 激活(4)
  16. 进展:Pegasus的自动化编译测试
  17. 2048AI设计与实现
  18. Codeforces Round #796 (Div. 2) B Patchouli‘s Magical Talisman
  19. 痞子衡嵌入式:嵌入式Cortex-M系统中断延迟及其测量方法简介
  20. 使用Cpolar+freekan源码 创建在线视频网站

热门文章

  1. mvn compile报错“程序包com.XXX不存在”
  2. 任正非接班人亮相:原来他要的是这种类型!
  3. 【BZOJ3893】【Usaco2014 Dec】Cow Jog 乱搞
  4. 英文学习20180327
  5. Android Audio(七)—— AudioFocus(duck)
  6. 努比亚红魔6spro线刷9008救砖教程
  7. 计算机网路原理复习笔记
  8. Java怎样把时间转成毫秒_如何转换时间格式 java如何把时间格式转为毫秒
  9. 一个SAPer的网络日志-连载二-说说MM的倒爷们
  10. 可使用 git 操作的数据库 dolt