首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从递归函数早期返回值

问从递归函数早期返回值
EN

Stack Overflow用户
提问于 2015-07-16 02:02:18
回答 1查看 617关注 0票数 0

我有一棵节点树。在迭代此树深度时,我需要将所有重复节点的列表从根节点返回到我的当前节点。

由于某些业务需求,树的“已经遍历”部分永远不会相同。我在树中已经遍历的部分中做了很多交换/替换分支。因此,维护遍历节点的列表可能无法工作,因为每次我遍历节点时都需要更新。

因此,每当我需要回答getDuplicateNodesOfMyCurrentNode()时,我都需要从树的顶端开始(rootNode)并进行深度搜索--首先,直到我的currentNode,然后返回一个复制我的currentNode的list<Nodes>。

代码语言:javascript
复制
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时,我想要某种方式退出这个递归循环。

我可能可以通过维护一些布尔状态来实现这一点,但是我想知道解决这个问题的更好方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 03:39:06

通过布尔值通过调用堆栈传递是否中止递归,必要时在递归调用点放弃当前的for循环(还确认Norbet van Nobelen在上面提到类似内容的注释)。

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31444208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档