LeetCode-236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
class Solution {
public:
TreeNode* fun(TreeNode* root,TreeNode* p,TreeNode* q){
if(p == root || q == root || !root)return root;
TreeNode* left = fun(root->left,p,q);
TreeNode* right = fun(root->right,p,q);
//中
if(left && !right)return left;
if(right && !left)return right;
if(left && right)return root;
//if(!left && !right)
return NULL;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
return fun(root,p,q);
}
};
执行结果:
通过
执行用时:
12 ms, 在所有 C++ 提交中击败了93.21%的用户
内存消耗:
13.9 MB, 在所有 C++ 提交中击败了73.85%的用户
通过测试用例:
31 / 31