在二叉树中找到两个节点的最近公共祖先(NC102/考察次数Top25/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在二叉树中找到两个节点的最近公共祖先(NC102/考察次数Top25/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
注:本题保证二叉树中每个节点的val值均不相同。
示例1
输入:
[3,5,1,6,2,0,8,#,#,7,4],5,1
返回值:
3
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
//思路1,使用递归函数来完成,最近公共祖先和o1,o2有三种关系
//1.o1,o2分别在祖先左右两侧;2.祖先是o1,o2在左右两侧;3.祖先是o2,o1在左右两侧;
//将CommmonAncestor定义成了求祖先节点的函数,使用递归函数进行求解
return CommonAncestor(root, o1, o2)->val; //输入root节点,以及o1,o2的值
}
TreeNode* CommonAncestor(TreeNode *root, int o1, int o2) //输入root节点,以及o1,o2的值
{
if (root == nullptr || root->val == o1 || root->val == o2) //根节点为空,或者情况二和三
{
return root;
}
TreeNode *left = CommonAncestor(root->left,o1,o2); // 在左侧进行求解,得出节点结果
TreeNode *right = CommonAncestor(root->right,o1,o2); // 在右侧进行求解,得出节点结果
if (left == nullptr) { // 左侧无解
return right;
}
if (right == nullptr) { // 右侧无解
return left;
}
return root; // 说明刚好在root的左右两侧
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于在二叉树中找到两个节点的最近公共祖先(NC102/考察次数Top25/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 面试必刷TOP101:在二叉树中找到两个节点的最近公共祖先
如果不是树中的所有这些节点,Python会在二叉树中找到两个节点的最低共同祖先
2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 pq,最近公共祖先表示为一个节点 x,满足 x 是 p