注意两点
dfs 函数的返回值if (!res ... 确保返回最近公共祖先 (后序遍历第一个同时找到 p & q ) → 否者会返回根节点class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
dfs(root, p, q);
return res;
}
private:
TreeNode *res;
// p -> 0b10
// q -> 0b01
int dfs(TreeNode* root, TreeNode* p, TreeNode* q) {
if (!root) return;
int state = 0;
state |= dfs(root->left, p, q);
state |= dfs(root->right, p, q);
if (root == p) state |= 0b10;
if (root == q) state |= 0b01;
if (!res && state == 0b11) {
res = root;
}
return state;
}
};