后代/祖先查询

时间:2014-01-24 01:09:06

标签: data-structures

我已多次看过我的书,但我对一个定义感到困惑。在我的数据结构和算法书中,我有以下定义:

节点u是节点v的祖先,如果u = v或u是v的父节点的祖先。相反,我们说节点是后代的祖先,那么节点u的强度>

定义的第一部分是什么?这是否意味着一个节点只有两个祖先,本身(u = v)和它的父节点(v的父节点)的父节点?

1 个答案:

答案 0 :(得分:0)

  

节点u是节点v的祖先,如果u = v或u是v的父节点的祖先。

这是一个递归定义,意味着节点的祖先是节点本身以及节点的父节点和所有父节点的祖先。

父母的祖先由相同的定义定义的事实是使其递归的原因,以及例如父母的父母也是祖先的原因。

也许应用这个定义的结构的演练将有所帮助。

考虑树:

     A
   /   \
  B     C  
 /     / \  
D     E   F  
     /  
    G  

如果我们想找到节点 G 的所有祖先,我们应用定义:

G 本身是一个祖先,而 E G 的父级,所有 E '祖先也是 G 的祖先。

这意味着为了找到 G 的所有祖先,我们必须找到 E 的所有祖先。

同样,定义 E 本身是 E 的祖先,因此也是 G 的祖先,就像的所有祖先一样E 的父母, C

所以我们必须找到 C 的所有祖先!

再次应用定义, C 是其自身的祖先,因而是 E G 的祖先。 C 的父 A 的祖先也是如此。

所以我们必须找到 A 的所有祖先!

嗯,根据定义 A 是它自己的祖先,因为它没有父级,所以它没有其他祖先。

那么,在达到终止条件后,递归将我们通过堆栈发回给结果......

C 有祖先 C (本身)和 A (所有父 A 的祖先)

E 的祖先 E (本身)和 C A (所有父 C 的祖先)。

* G的祖先 G (本身)和 E C A (所有父母) E 的祖先)。

我希望这更清楚,但正如他们所说,“为了理解递归,你必须首先理解递归。”