【发布时间】:2015-07-16 02:02:18
【问题描述】:
我有一个节点树。在首先迭代此树深度时,我需要将所有重复节点的列表从根节点返回到我的当前节点。
由于某些业务需求,树的“已遍历”部分永远不会相同。我在树的已经遍历的部分中做了很多分支的交换/替换。因此,维护遍历节点列表可能不起作用,因为每次完成遍历节点时它都需要更新。
所以每当我需要回答 getDuplicateNodesOfMyCurrentNode() 时,我需要从树的顶部开始 (rootNode) 并首先搜索深度直到我的 currentNode 并返回一个 list<Nodes>,这是我的 @ 的重复987654325@.
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,我想要某种方式退出这个递归循环。
我可能可以通过维护一些布尔状态来实现这一点,但想知道解决这个问题的更好方法。
【问题讨论】:
-
用break代替return?
-
不,这不起作用.. Break 仅中断当前呼叫。我需要退出所有递归调用
-
返回一个布尔状态(返回真)并继续检查 + 回退,直到你打到调用者。
-
这里显示的方法不是递归的。这是一个简单的循环。既没有声明也没有修改的
builtOn是什么?顺便提一句。为您的方法考虑另一个名称。返回void甚至boolean的方法getDuplicateNodesOfMyCurrentNode并不直观。 -
感谢您的建议。我的 java 代码中有一个错字。修改它以使其递归。也是的,我会更改此方法的名称以使其更直观。只是专注于确保我在这里清楚自己和我的要求