/**
* 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*res;
bool dfs(TreeNode*root,TreeNode*p,TreeNode*q){
if(root==NULL)return false;
bool lson=dfs(root->left,p,q);
bool rson=dfs(root->right,p,q);
if((rson&&lson)||(root->val==p->val||root->val==q->val)&&(lson||rson)){
res=root;
}//结束条件:左子树和右子树均包含 p 节点或 q 节点或者恰好是 p 节点或 q 节点且它的左子树或右子树有一个包含了另一个节点的情况
return lson||rson||root->val==p->val||root->val==q->val;//真假依据
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
dfs(root,p,q);
return res;
}
};
面试题 04.08. 首个共同祖先
最新推荐文章于 2024-11-12 12:29:51 发布