思路
- 递归条件——结点为空 返回false
- 递归左右子树
- 判断
p q
是否分布在两旁 - 如果不是 则集中在左边 或 右边 或 一个结点即当前根
代码
class Solution {
public:
TreeNode* ans;
bool dfs(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == nullptr) return false;
bool lson = dfs(root->left, p, q);
bool rson = dfs(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) {
dfs(root, p, q);
return ans;
}
};