class Solution {
public:
unordered_map<int, TreeNode*> fa;
unordered_map<int, bool> vis;
void dfs(TreeNode* root){
if (root->left != nullptr) {
fa[root->left->val] = root;
dfs(root->left);
}
if (root->right != nullptr) {
fa[root->right->val] = root;
dfs(root->right);
}
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
fa[root->val] = nullptr;
dfs(root);
while (p != nullptr) {
vis[p->val] = true;
p = fa[p->val];
}
while (q != nullptr) {
if (vis[q->val]) return q;
q = fa[q->val];
}
return nullptr;
}
};
相关文章
- 01-04二叉树中两个节点的最近公共祖先(批量)
- 01-04在二叉树中查找两个节点的最近公共祖先2020.12.2
- 01-04剑指Offer 两个链表的第一个公共结点
- 01-04剑指 Offer 27. 二叉树的镜像
- 01-04435,剑指 Offer-对称的二叉树
- 01-04Easy | LeetCode 160 | 剑指 Offer 52. 两个链表的第一个公共节点
- 01-04【Leetcode】查找二叉树中任意结点的最近公共祖先(LCA问题)
- 01-04剑指 Offer 34. 二叉树中和为某一值的路径
- 01-04剑指 Offer 27. 二叉树的镜像
- 01-04C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解