两种解法:
这样理解,一个人从郑州到上海,一个交叉口就是一个节点,两个人各走各的,把节点都存储到数组中,然后遍历,第一个不相等节点,就是二者最小公共祖先节点。
第二种解法:两个人一起走,突然有个路口要分离,【需要进行一次判断】,那么这个就是最小公共祖先,省去了一部分存储,
class Solution {
public:
vector<TreeNode*> getPath(TreeNode* root,TreeNode* tar){
vector<TreeNode*> path;
TreeNode* p = root;
while(p != tar)
{
path.push_back(p);
if(p->val < tar->val){
p = p->right;
}else p = p->left;
}
path.push_back(p);
return path;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
vector<TreeNode*> path_p;
vector<TreeNode*> path_q;
path_p = getPath(root,p);
path_q = getPath(root,q);
TreeNode* anc = NULL;
for(int i = 0; i < path_p.size() && i < path_q.size(); i++)
{
if(path_p[i] == path_q[i]) anc = path_p[i];
else break;
}
return anc;
}
};