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



我开始说Stack Overflow上还有一个关于这个的问题,但是我找不到一个真正的答案,因为所有与这个问题相关的答案都彼此不同,这真的让我更困惑了。我的问题是,谈论抽象数据类型-树(正常不是二叉树,在Java编程中,以防万一它有区别)。

1)是树的节点本身的祖先/后代吗?

假设我查找了祖先的定义,结果是这样的变体:

"通过从子节点到父节点的重复进程可到达的节点"

"一个节点的祖先是:它自己,它的父节点,或者它的父节点的祖先"

"节点U是节点V的祖先,只有当:U = V或U是V父结点的祖先"

2)"祖先"是否有一个通用的定义,或者两个定义(包括节点本身与否)都是正确的?

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

您可以从定义非常好的XPath推荐中使用的轴命名法中获得灵感:

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

  • 子轴包含上下文节点
  • 的子节点。
  • 后代轴包含上下文节点的后代;后代是孩子或孩子的孩子等等;
  • 父轴包含上下文节点的父节点,如果有一个
  • 祖先轴包含上下文节点的祖先;上下文节点的祖先包括上下文节点的父节点和父节点的父节点等等;因此,祖先轴将始终包含根节点,除非上下文节点是根节点

由于有时对包括上下文节点在内的后代或祖先节点进行操作很有用,因此它额外定义了:

  • 后代或自轴包含上下文节点和上下文节点的后代

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

这个模型可以回答你的问题1。其他模型可能有所不同。问题2:无法回答。

最新更新