首页 > 解决方案 > 根据下面给出的逻辑实现父子关系逻辑

问题描述

必须执行以下逻辑,我无法继续,

逻辑:

A has a child B 
B has a child C 
C has a child D 
D doesn’t have any child 
E doesn’t have any child

在选择任何父母时,应在列表中添加该特定选定父母的潜在孩子列表。

对于上述场景,所需的输出如下所示,

在选择父 A 时,子列表包含 B、C、D 和 E。

在选择父 B 时,子列表包含 C、D 和 E。A 不能是 B 的子,因为 B 已经是 A 的子,因此不会列出 A。

在选择父级 C 时,子级列表包含 D 和 E。B 不能是 C 的子级,因为 C 已经是 B 的子级,A 不能是 C 的子级,因为 B 是流 A 的子级。因此 A 和B 不会被列出。

在选择父母 D 时,孩子的列表 E.C 不能是 D 的孩子,因为 D 已经是 C 的孩子,B 不能是 D 的孩子,因为 B 是 C 的孩子,A 不能是 D 的孩子因为 A 有一个孩子 B。因此不会列出 A、B 和 C。

在选择 E 时,孩子列表包含 A、B、C 和 D。

请帮我实现这个逻辑。

标签: javascriptrecursionparent-child

解决方案


假设每个节点至多有一个父节点,以下逻辑应该可以完成这项工作:

var allNodes = [A, B, C, D, E]

function onNodeSelect(node) {
  var possibleChildren = allNodes
  possibleChildren.remove(node)

  var currentNode = node
  while (currentNode.hasParent) {
    currentNode = node.parent
    possibleChildren.remove(currentNode)
  }

  return possibleChildren
}

推荐阅读