树中的节点是否被视为自己的祖先?

时间:2010-06-20 03:48:34

标签: algorithm binary-search-tree clrs

我想知道在计算机科学背景下对“祖先”定义的共识是什么。

我只是问,因为在Introduction to Algorithms,第二版,p。 259有一个奇怪的算法Tree-Successor(x)的描述。在找到节点 x 的后继者时,

  

[...]如果节点 x 的右子树为空且 x 有后继 y ,那么 y x 的最低祖先,其左子也是 x 的祖先。

在二元搜索树中,其根具有键2以及子131的后继者是其父2。在这种情况下, x x 的后继者的左子, y 。根据这本书的定义, x 必须是它自己的祖先,除非我遗漏了什么。

我在errata中没有找到任何关于此事的内容。

3 个答案:

答案 0 :(得分:14)

这仅仅是定义问题,但在这种情况下,。 CLRS将x的祖先定义为从根到x的唯一路径上的任何节点,根据定义,它包括x。

你引用的句子片段首先提到下一页的练习12.2-6,它指明了这一点:

  

(回想一下每个节点都是它自己的祖先。)

: - )

答案 1 :(得分:5)

  

树中的节点是否被视为自己的祖先?

不正常,AFAIK。例如,在binary trees上的维基百科页面中, ancestor 定义为:

  

如果存在从节点p到节点q的路径,其中节点p比q更接近根节点,则p是q的祖先,q是p的后代。

但显然教科书对祖先的定义是一个节点是它自己的祖先。这个定义并不完全直观,但教科书可以自由地为其使用的术语引入自己的定义。也许这个定义简化了一些相关的描述/定理/等。

答案 2 :(得分:-1)

不,节点不是它自己的祖先。根据我的说法,它应该是:如果节点x的右子树是空的并且x具有后继y,那么y是x的最低祖先,其左子节点是either x or an ancestor of x.但是书中给出的代码据说是处理这样的案件类型。