面试题 04.08. 首个共同祖先

设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-common-ancestor-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

在这里插入图片描述
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root == NULL){
            return NULL;
        }

        //1,节点p或者q是root节点,返回根节点
        if(root->val == p->val ||root->val == q->val){
            return root;
        }

        TreeNode* left = lowestCommonAncestor(root->left, p, q);// left 记录p或q是在左子树找到的
        TreeNode* right = lowestCommonAncestor(root->right, p, q);// right 记录p或q是在左子树找到的

        //2,p,q分别在左右两棵子树上,返回根节点
        if(left != NULL && right != NULL){
            return root;
        }

        //p,q在同一棵子树上
        if(left){
            return left;
        }else{
            return right;
        }
    }

};
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页