查找树中两个节点的最小公共祖先

时间:2014-12-23 05:58:45

标签: c++ tree nodes

我在接受采访时得到了这个问题,即使我知道如何解决问题,也没有回答。我不知道该怎么办的原因是因为问题是这样给我的:

class Node{
      int val;
      Node *left, *right;
};

int LCA(int a, int b){
     //your code here
}

面试官希望我找到a和b中最不常见的祖先。我问我们是否有一个指向我们正在搜索的树的根的指针,他说没有。所以我对如何解决问题感到困惑,因为我甚至没有树可以使用。

在这种情况下,是否有可能找到最不常见的祖先?我是否应该假设我们获得了一个全局Node*,它是树的根或什么的?有没有人遇到类似的问题?

2 个答案:

答案 0 :(得分:2)

不,不可能。要回答您提出的问题,您需要能够找到节点与其祖先之间的路径。为此,您需要将节点作为起点,并在每个节点中引用父节点。或祖先(或祖先的祖先)作为起点,并引用每个节点中的儿童。

答案 1 :(得分:1)

从您描述访谈互动的方式来看,我怀疑这是一个棘手的问题。可能是一个微弱的尝试,看你是否坚持你的问题澄清。

如果是我,在得到没有root的反馈之后,我会问是否有其他方式节点值彼此相关。如果节点具有数学关系,则可能不需要根节点来解决LCA问题。

另一种策略是确定如何插入,删除和找到节点。也就是说,找出可用的API。您可能已经发现面试官会提供父API。

有时,面试就像一场冒险游戏,面试官真的希望你找到摆脱曲折迷宫的方式(不管看起来多么不公平)。