一.思路
分析这个问题有两个点如何判断公共祖先和如何找到最近的公共祖先
可以用递归的思路来判断,1当一个节点左右两个子树中存在p 和q,2节点本身是p或q,他的左右两个子树存在p或q。
使用后序遍历从叶节点往上遍历,就能找到最近的
二.代码实现
class Solution {
public:
TreeNode* ans;
bool bfs(TreeNode* root,TreeNode*p,TreeNode*q)
{
if(root == NULL)
{
return false;
}
bool lson = bfs(root->left,p,q);
bool rson = bfs(root -> right,p,q);
if((lson && rson ) || ((root->val == p -> val || root ->val == q -> val))&&(lson || rson))
{
ans = root;
}
return lson || rson || root->val == p -> val || root->val == q -> val;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{
bfs(root,p,q);
return ans;
}
};