方法一:递归

1.思路

(1)定义fx表示x节点的子树中是否包含p或者q节点,如果包含为true,否则为false。那么符合条件的最近公共祖先节点一定满足下面的条件:

(flson && frson) || ((x = p || x = q) && (flson || frson))

其中flson和frson分别表示左子树含有p或q节点。

(2)若想找到最近公共祖先节点,必须使用深度遍历实现

2.实现var lowestCommonAncestor = function(root, p, q) {

if(!root) return null; //如果根节点为空的话,直接返回null

let result; //定义返回值

const dfs = (root, p, q) => {

//先定义深度遍历递归的条件

if(!root) return false;

let lson = dfs(root.left, p, q); //先从左子树开始深度遍历

let rson = dfs(root.right, p, q); //再从右子树开始深度遍历

if((lson && rson) || ((root === q || root === p) && (lson || rson))) {

//如果符合该条件的话,就是找到了最近的公共祖先节点

result = root;

}

//只要有一项符合要求的话,就返回true

return lson || rson || root === p || root === q;

}

dfs(root, p, q);

return result;

};

二叉树寻找祖先C语言,二叉树寻找最近公共祖先节点相关推荐

  1. 寻找树中两个结点的最低公共祖先

    寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...

  2. 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p

    2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...

  3. 二叉树中找两个结点的最近公共祖先结点

    一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...

  4. 二叉树part8 | ● 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    文章目录 235. 二叉搜索树的最近公共祖先 思路 代码 困难 701.二叉搜索树中的插入操作 思路 代码 450.删除二叉搜索树中的节点 思路 代码 困难 今日收获 235. 二叉搜索树的最近公共祖 ...

  5. 二叉树广度遍历 c语言,二叉树深度优先遍历和广度优先遍历

    对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支.以上面二叉树为例,深度优先搜索的顺序 为:ABDECFG.怎么实现这个顺序呢 ? ...

  6. 数据结构-寻找二叉树两节点的最近公共祖先(Java)

    寻找最近公共祖先 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 ...

  7. leetcode 236. 二叉树的最近公共祖先 递归解法 c语言

    如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...

  8. C语言二叉树的lowest common ancestor最低公共祖先(附完整源码)

    C语言二叉树的lowest common ancestor最低公共祖先 C语言二叉树的lowest common ancestor最低公共祖先完整源码(定义,实现,main函数测试) C语言二叉树的l ...

  9. LeetCode实战:二叉树的最近公共祖先

    背景 为什么你要加入一个技术团队? 如何加入 LSGO 软件技术团队? 我是如何组织"算法刻意练习活动"的? 为什么要求团队的学生们写技术Blog 题目英文 Given a bin ...

最新文章

  1. 常用Maven收集以及Maven技巧
  2. input blur获取不到当前值_解决 Laravel JWT 多表认证时获取不到当前认证用户的问题...
  3. 月读の自动读取 根据注释解析列名和字典
  4. VC编写的程序不能在其他机器上运行的解决方案(续)
  5. 无忧考吧python编译环境不存在_python:flake8找不到不存在的方法
  6. 【计蒜客信息学模拟赛1月月赛 - B】蒜头套圈圈(贪心,前缀最大值)
  7. linux调用堆栈函数,使用 backtrace 获得 Linux 函数调用栈
  8. 对话张潼 | 腾讯AI Lab周岁:规模飙至370人,要做后来居上的终结者
  9. 大数据可视化该如何实现
  10. php类微博源码,类微博功能设计
  11. Mybatis if test中字符串比较
  12. 计算机网络课设--小型企业网络的规划与设计
  13. 教你如何选择弱电工程中使用的交换机?
  14. 在开放环境的步态识别:一个基准(三)
  15. frame buffer驱动
  16. 以太网详解(二)-物理介质(100base-TX等)介绍
  17. 盒式交换机S5750系列指示灯含义
  18. 企业微信如何自动同步外部客户信息到CRM系统
  19. 矩阵相乘(Python)
  20. 决策模型(一):不确定型决策法

热门文章

  1. 项目实训-在线考试系统06
  2. 使用 JavaScript 编写更好的条件语句
  3. 2021.01.29小型计算器
  4. 【Houdini官方入门教程翻译】概述——建模工具
  5. Docker Hub的使用方法
  6. python代码实现论文〖文献引用顺序〗修改校对
  7. open函数的参数说明
  8. 浅谈物联网所面对的问题和挑衅
  9. 通信原理13.3码元同步13.4群同步
  10. 浅浅浅学 Nginx 基基基础(较为完整)