方法一:通过DFS将节点node的父节点保存在哈希表中
q、p的祖先节点有两种情况一种是q或者p是对方的祖先节点、第二种是q、p节点为不同分支,我们可以将其中一个节点q的父节点全部放入哈希表temp中,然后依次将p节点的父节点放入temp中进行搜索,第一个可以在temp中可以搜索到的即为最小祖先节点
/*** 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:unordered_map<TreeNode* ,TreeNode*>patent;TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {unordered_set<TreeNode*> temp;dfs(root);while(p){temp.emplace(p);p=patent[p];}if(temp.count(q)){return q;}else{while(q){q=patent[q];if(temp.count(q)){return q;}}}return root;}void dfs(TreeNode* root){if(root==NULL){return;}patent.emplace(root->left,root);patent.emplace(root->right,root);dfs(root->left);dfs(root->right);}};
