我有一棵节点树。在迭代此树深度时,我需要将所有重复节点的列表从根节点返回到我的当前节点。
由于某些业务需求,树的“已经遍历”部分永远不会相同。我在树中已经遍历的部分中做了很多交换/替换分支。因此,维护遍历节点的列表可能无法工作,因为每次我遍历节点时都需要更新。
因此,每当我需要回答getDuplicateNodesOfMyCurrentNode()时,我都需要从树的顶端开始(rootNode)并进行深度搜索--首先,直到我的currentNode,然后返回一个复制我的currentNode的list<Nodes>。
private void getDuplicateNodesOfMyCurrentNode(Node parentNode, Node currentNode,List<Node> dupNodes){
for(Node child: parentNode.getChildren()){
if(child == currentNode){
return;
}
if(child.getApp().equals(currentNode.getApp()){
dupNodes.add(child);
}
getDuplicateNodesOfMyCurrentNode( child, currentNode, aDupNodes);}
正如你们已经知道了这段代码的问题,因为它递归地调用自己,所以返回不会将控件返回给这个API的调用者。当我到达我的currentNode时,我想要某种方式退出这个递归循环。
我可能可以通过维护一些布尔状态来实现这一点,但是我想知道解决这个问题的更好方法。
发布于 2015-07-16 03:39:06
通过布尔值通过调用堆栈传递是否中止递归,必要时在递归调用点放弃当前的for循环(还确认Norbet van Nobelen在上面提到类似内容的注释)。
private boolean getDuplicateNodesOfMyCurrentNode(Node parentNode, Node currentNode,List<Node> dupNodes){
for(Node child: parentNode.getChildren()){
if(child == currentNode){
return false;
}
if(child.getApp().equals(currentNode.getApp()){
dupNodes.add(child);
}
if (getDuplicateNodesOfMyCurrentNode( builtOn, currentNode, aDupNodes) == false){
return false;
}
}
return true;
}https://stackoverflow.com/questions/31444208
复制相似问题