设计并实现一个算法,找出二叉树中某两个节点的第一个共同祖先。不得将其他的节点存储在另外的数据结构中。注意:这不一定是二叉搜索树。
例如,给定如下二叉树: 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;
}
}
};