这更像是一个逻辑问题,我很难搞清楚,我会发布伪代码,如果有任何不清楚的地方,请告诉我。
我正在尝试编写一个函数来搜索N阵列树中目标的多个实例(每个节点有0到N个子节点)。
我试图递归地解决这个问题,这就是我所拥有的:
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
一旦找到目标的第一个实例,它就会返回并停止运行。但我希望它能找到并打印所有实例。但是递归地执行此操作,我很难弄清楚如何订购代码。
答案 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
以强制它每次都递归。