题目:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4]

代码实现:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr || p == nullptr || q == nullptr)return nullptr;list<TreeNode*> path1;GetNodePath(root, p, path1);list<TreeNode*> path2;GetNodePath(root, q, path2);return CommonNode(path1, path2);}bool GetNodePath(TreeNode* root, TreeNode* node, list<TreeNode*>& path){//先把root节点加入到list中path.push_back(root);//找到目标节点if (root == node)  return true;//标志符foundbool found = false;if (!found && root->left != NULL) found = GetNodePath(root->left, node, path);if (!found && root->right != NULL) found = GetNodePath(root->right, node, path);//如果没有找到,则返回头节点时,删除当前节点if (!found){path.pop_back();}return found;}TreeNode* CommonNode(list<TreeNode*> path1, list<TreeNode*> path2){list<TreeNode*>::iterator iter_1 = path1.begin();list<TreeNode*>::iterator iter_2 = path2.begin();TreeNode* result = nullptr;while(iter_1 != path1.end() && iter_2 != path2.end()){if(*iter_1 == *iter_2)result = *iter_1;iter_1++;iter_2++;}return result;}
};

二叉树节点的公共祖先相关推荐

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

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

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

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

  3. 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表

    二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...

  4. LeetCode 1676. 二叉树的最近公共祖先 IV

    文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...

  5. 最近公共祖先_leetcode No.236 二叉树的最近公共祖先

    承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...

  6. 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...

    1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...

  7. LeetCode——二叉树的最近公共祖先

    此问题也成为LCA问题 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 ...

  8. 二叉搜索树的公共祖先,二叉树的最近公共祖先

    二叉树的定义: # Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.l ...

  9. 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)

    一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...

最新文章

  1. centos环境变量设置
  2. mysql约束建表规范_MySQL 建库建表规范
  3. Xshell相关优化
  4. 软考-信息系统项目管理师-流程管理
  5. python svn模块_使用Python实现一键批量更新SVN/Git模块的脚本
  6. leetcode最小面积_Code Review Swift 算法题: 最小面积矩形  Leetcode 的动人之处
  7. P7276-送给好友的礼物【dp】
  8. Redis与关系型数据库的同步问题
  9. cupload怎么保存图片_原生js的图片上传插件cupload
  10. oracle多用户导出导入用法
  11. cvCreateStructuringElementEx理解
  12. CSDN资源下载积分规则
  13. 麟龙指标通达信指标公式源码_麟龙饱和度公式源码副图指标公式-通达信公式 -程序化交易(CXH99.COM)...
  14. python模块使用手册_Python中文手册-Python模块
  15. 什么是需求跟踪矩阵RTM
  16. python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
  17. ArrayList集合(Java)
  18. Python 正则表达式详解(re 库)
  19. 软件测试是否应该为软件质量背锅?
  20. 我是一个创业者,也是一个开发者!

热门文章

  1. ES 词库热更新(实现方式一:远程词库)
  2. 起亚进军中国电动车市场,EV5将于11月在中国首发
  3. 【pwnable.kr】 blackjack - 成为百万富翁(millionaire)
  4. 第十八章 一路向北——幻想FPGA人工智能的未来世界
  5. vue实现手机端,手势切换左右滑动的功能
  6. 利用ViewDragHelper实现菜鸟裹裹的悬浮按钮效果
  7. 男人,请把哄的时间延长些
  8. 网易云课堂 python数据分析_网易云课堂 数据分析(二)
  9. Web开发必知必会,如何使用 Letsencrypt 为网站签发 HTTPS 证书提供安全支持
  10. 专家不建议年轻人掏空六个钱包凑首付