LKJZ68-2-二叉树的最近公共祖先
递归终止条件-root==nullptr||p==root||q==root
递归
返回值
left和right同时为空-root的左右子树都不包含pq,return nullptr
left为空right不为空-pq都不在root的左子树中,直接return right
right为空left不为空-pq都不在root的右子树中,直接return left
left和right同时不为空-pq一左一右,return root
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
//递归终止条件
if(root==nullptr||root==p||root==q){
return root;
}
//开始递归
TreeNode*left=lowestCommonAncestor(root->left,p,q);
TreeNode*right=lowestCommonAncestor(root->right,p,q);
//pq不在root的左右子树中,renturn nullptr
if(left==nullptr&&right==nullptr){
return nullptr;
}
//pq都不在左子树中,return right
if(left==nullptr){
return right;
}
//pq都不在右子树中,return left
if(right==nullptr){
return left;
}
//pq一左一右
return root;
}
};