二叉树节点的公共祖先
题目:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 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;}
};
二叉树节点的公共祖先相关推荐
- 代码随想录算法训练营第22天 二叉树 java :235. 二叉树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点
文章目录 LeetCode 236. 二叉树的最近公共祖先 题目讲解 思路 LeetCode 701.二叉搜索树中的插入操作 题目讲解 思路 LeetCode 450.删除二叉搜索树中的节点 题目讲解 ...
- leetcode 236. 二叉树的最近公共祖先 递归解法 c语言
如题: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先.百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x, 满足 x 是 p.q ...
- 二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先 思路 在左.右子树中分别查找是否包含p或q: 如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先 如果左子树包含p和q, ...
- LeetCode 1676. 二叉树的最近公共祖先 IV
文章目录 1. 题目 2. 解题 1. 题目 给定一棵二叉树的根节点 root 和 TreeNode 类对象的数组(列表) nodes,返回 nodes 中所有节点的最近公共祖先(LCA). 数组(列 ...
- 最近公共祖先_leetcode No.236 二叉树的最近公共祖先
承接二叉搜索树的最近公共祖先. 题目链接: 二叉树的最近公共祖先 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百 ...
- 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...
1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C+ ...
- LeetCode——二叉树的最近公共祖先
此问题也成为LCA问题 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 ...
- 二叉搜索树的公共祖先,二叉树的最近公共祖先
二叉树的定义: # Definition for a binary tree node. class TreeNode:def __init__(self, x):self.val = xself.l ...
- 力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)
一.环境说明 本文是 LeetCode 236. 二叉树的最近公共祖先,使用c语言实现. 递归. 测试环境:Visual Studio 2019. 二.代码展示 精简代码: struct TreeNo ...
最新文章
- centos环境变量设置
- mysql约束建表规范_MySQL 建库建表规范
- Xshell相关优化
- 软考-信息系统项目管理师-流程管理
- python svn模块_使用Python实现一键批量更新SVN/Git模块的脚本
- leetcode最小面积_Code Review Swift 算法题: 最小面积矩形 Leetcode 的动人之处
- P7276-送给好友的礼物【dp】
- Redis与关系型数据库的同步问题
- cupload怎么保存图片_原生js的图片上传插件cupload
- oracle多用户导出导入用法
- cvCreateStructuringElementEx理解
- CSDN资源下载积分规则
- 麟龙指标通达信指标公式源码_麟龙饱和度公式源码副图指标公式-通达信公式 -程序化交易(CXH99.COM)...
- python模块使用手册_Python中文手册-Python模块
- 什么是需求跟踪矩阵RTM
- python识别颜色并提取轮廓_用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积...
- ArrayList集合(Java)
- Python 正则表达式详解(re 库)
- 软件测试是否应该为软件质量背锅?
- 我是一个创业者,也是一个开发者!
热门文章
- ES 词库热更新(实现方式一:远程词库)
- 起亚进军中国电动车市场,EV5将于11月在中国首发
- 【pwnable.kr】 blackjack - 成为百万富翁(millionaire)
- 第十八章 一路向北——幻想FPGA人工智能的未来世界
- vue实现手机端,手势切换左右滑动的功能
- 利用ViewDragHelper实现菜鸟裹裹的悬浮按钮效果
- 男人,请把哄的时间延长些
- 网易云课堂 python数据分析_网易云课堂 数据分析(二)
- Web开发必知必会,如何使用 Letsencrypt 为网站签发 HTTPS 证书提供安全支持
- 专家不建议年轻人掏空六个钱包凑首付