在二叉树中找到两个节点的最近公共祖先
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在二叉树中找到两个节点的最近公共祖先相关的知识,希望对你有一定的参考价值。
在二叉树中找到两个节点的最近公共祖先
描述
给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
注:本题保证二叉树中每个节点的val值均不相同。
示例1
输入:
[3,5,1,6,2,0,8,#,#,7,4],5,1
返回值:
3
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param root TreeNode类
* @param o1 int整型
* @param o2 int整型
* @return int整型
*/
int dfs(TreeNode* root ,int o1, int o2)
{
if(root == nullptr)
return -1;
if(o1 == root->val || o2 == root->val) //递归直到找到o1 及o2,逐级向上返回(传),
return root->val; //题目要求的最近公共祖先,不能是o1或o2之一,所以肯定要向上返回一次
int left = dfs(root->left, o1, o2);
int right = dfs(root->right, o1, o2);
if(left == -1)
return right;
if(right == -1)
return left; //如果有一个结点的左右子树都不为-1了,即为最近公共祖先
return root->val;
}
int lowestCommonAncestor(TreeNode* root, int o1, int o2) {
return dfs(root, o1, o2);
}
};
以上是关于在二叉树中找到两个节点的最近公共祖先的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 面试必刷TOP101:在二叉树中找到两个节点的最近公共祖先
在二叉树中找到两个节点的最近公共祖先(NC102/考察次数Top25/难度中等)