ADT树 - 是它自己的节点祖先/后代?

时间:2015-09-09 15:27:50

标签: java data-structures tree abstract-data-type

我会开始说Stack Upflow上有另外一个问题,但是我找不到真正的答案,因为与这个问题相关的所有答案都彼此不同,而且我真的很困惑我我已经是。我的问题是这个,谈论抽象数据类型 - 树(通常不是二叉树和Java编程,以防它有所不同)。

1)是树的一个节点,它本身的祖先/后代?

让我们说我一直在寻找祖先的定义,结果就是这样的变化:

“一个节点可以通过从子节点到父节点重复进行”

“节点的祖先是:本身,它的父节点,或其父节点的祖先”

“只有在以下情况下,节点U才是节点V的祖先:  U = V或  你是V的父母的祖先“

2)是否存在“祖先”的通用定义,或两种定义(包括节点本身与否)是对的吗?

3)如果节点本身不被认为是它自己的祖先,那么节点深度的定义是否等于其祖先的数量?

1 个答案:

答案 0 :(得分:2)

您可以从极其明确的XPath建议中使用的轴命名法中获取灵感:

给定树中的节点(即上下文节点),规范定义了轴,即相对于上下文节点的节点集:

  • 子轴包含上下文节点的子项
  • 后代轴包含上下文节点的后代;后代是孩子或孩子的孩子等等;
  • 父轴包含上下文节点的父级(如果有)
  • 祖先轴包含上下文节点的祖先;上下文节点的祖先由上下文节点的父节点和父节点的父节点组成,依此类推;因此,祖先轴将始终包括根节点,除非上下文节点是根节点

由于对后代或祖先(包括上下文节点)进行操作有时很有用,因此它还定义了:

  • descendant-or-self axis 包含上下文节点和上下文节点的后代

  • 祖先或自我轴包含上下文节点和上下文节点的祖先;因此,祖先轴将始终包含根节点

此模型可以回答您的问题1.其他模型可能有所不同。 Q2:无法回答。问题3:仅取决于如何定义深度。