Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * 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* lca;
- TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
- lca = NULL;
- bool found = false;
- dfs(root, p, q, found);
- return lca;
- }
- pair<bool, bool> dfs(TreeNode* root, TreeNode*p, TreeNode* q, bool &found){
- if(found) return {true, true};
- if(!root) return {false, false};
- auto left = dfs(root->left, p, q, found);
- auto right = dfs(root->right, p, q, found);
- pair<bool, bool> seen;
- seen.first = (left.first || right.first);
- seen.second = (left.second || right.second);
- if(root->val == p->val) seen.first = true;
- if(root->val == q->val) seen.second = true;
- if(seen.first && seen.second && !found){
- found = true;
- lca = root;
- }
- return seen;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement