在树中查找目标,如果找不到目标,则删除整个树

时间:2015-06-28 04:28:32

标签: search recursion tree logic

这更像是一个逻辑问题,我很难搞清楚,我会发布伪代码,如果有任何不清楚的地方,请告诉我。

我正在尝试编写一个函数来搜索N阵列树中目标的多个实例(每个节点有0到N个子节点)。

  • 如果找到1个或更多实例,则会将它们全部打印出来。
  • 如果找不到目标实例,则必须删除整个树

我试图递归地解决这个问题,这就是我所拥有的:

bool foo(node){
    bool found = false
    if node.value = target:
        print target
        return true
    else:
        return false

    for child in node.children:
        found = found or foo(child)
    if not found:
        *run deletion process*
}

这个问题是第一个if语句:

if node.value = target:
        print target
        return true
    else:
        return false

一旦找到目标的第一个实例,它就会返回并停止运行。但我希望它能找到并打印所有实例。但是递归地执行此操作,我很难弄清楚如何订购代码。

1 个答案:

答案 0 :(得分:0)

由于我了解您的要求(如果未找到则删除整个树),您无法从递归中删除树。您必须先处理整个树,然后在找不到目标时将其删除。

所以:

bool foo(node){
    bool found = false

    if node.value = target:
        print target
        found = true

    for child in node.children:
        found = found or foo(child)

    return found
}

然后

if not foo(root)
    *run deletion process*

请注意,当您实际实现此操作时,一旦foo为真,某些语言将跳过found = found or foo(child)found的递归调用,因此只会打印第一个匹配项。在这种情况下,只需交换参数:found = foo(child) or found以强制它每次都递归。