微软面试模拟题: Leetcode236 二叉树的最近公共祖先

爷,独闯天下 提交于 2020-10-23 17:40:44

 

最近公共祖先的定义: 设节点 root 为节点 p, q的某公共祖先,若其左子节点 root.left和右子节点 root.right 都不是 p,qp,q 的公共祖先,则称 root 是 “最近的公共祖先” 。

定义函数的返回值如下: 假如从根节点,包含p和q,则返回最近公共祖先

假如不包含p和q,则返回NULL

假设只包含p,就返回p,假如只包含q,就返回q。

因此:

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if(root==NULL) return NULL;
        if(root==p||root==q) return root;
        TreeNode* left = lowestCommonAncestor(root->left,p,q);
        TreeNode* right = lowestCommonAncestor(root->right,p,q);
        if(left!=NULL&&right!=NULL) return root;
        else if(left) return left;
        else return right;
    } 
};

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!