gpt4 book ai didi

java - 尽早从递归函数返回值

转载 作者:行者123 更新时间:2023-12-02 04:31:11 24 4
gpt4 key购买 nike

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

由于某些业务需求,树的“已遍历”部分永远不会相同。我在树的已遍历部分中进行了大量的交换/替换分支。因此,维护遍历的节点列表可能不起作用,因为每次我完成遍历节点时它都需要更新。

所以每当我需要回答getDuplicateNodesOfMyCurrentNode()时我需要从树的顶部( rootNode )开始并深度优先搜索,直到我的 currentNode并返回 list<Nodes>这是我的 currentNode 的重复项.

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);

}

正如你们已经知道此代码的问题一样,return 不会将控制权返回给此 API 的调用者,因为它递归地调用自身。一旦我到达我的currentNode,我想要某种方法退出这个递归循环。 .

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

最佳答案

通过 boolean 值通过调用堆栈传递是否中止递归,并在递归调用时如有必要放弃当前的 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;
}

关于java - 尽早从递归函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com