在二叉树中找到两个节点的最近公共祖先

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/难度中等)

如果不是树中的所有这些节点,Python会在二叉树中找到两个节点的最低共同祖先

leetcode刷题13

python代码实现二叉树中最低的公共祖先

二叉树进阶题------最近公共祖先