需要一些帮助在java中编写递归方法。我有以下课程 -
public class Node {
...
private List<Node> children;
---
}
有两种类型的节点。类型A和类型B.方法的输入将是一个如下所示的列表 -
1 - Type A
2 - Type B
3 - Type B
4 - Type B
5 - Type A
6 - Type B
7 - Type B
8 - Type A
9 - Type B
10 - Type B
private void convertList(List<Node> nodes) {
}
我正在编写一个方法,将列表转换为 -
1
children 2, 3, 4, 5
children - 6, 7, 8
children - 9, 10
我可以通过从底部开始循环直到我到达根来迭代地转换。我试图递归地做,但根本无法得到逻辑。 任何帮助表示赞赏。感谢
答案 0 :(得分:0)
提示您的方法:
如果节点B然后将列表中的所有节点添加为兄弟节点, 如果节点A然后将列表中的所有节点添加为子节点。
它将如下所示:
private void convertList(List<Node> nodes) {
List<Node> newNodesList = new ArrayList<Nodes>()
node=last node
// you will have to do smthg specific for 1st call
// else
if (nodetype==A){
//add nodes to children of A
//add A to newNodes
}
else // assuming only A and B
{
//newNodesList=nodes except last
//add node to the newNodesList
}
return convertList(newNodesList);
}
我认为你必须考虑这一点。
并找到阻止递归的方法。
答案 1 :(得分:0)
我选择了这个解决方案
private List<Node> convertList(List<Node> children, int i, LinkedList<Node> newNodeList) {
i -= 1;
if (!(i >= 0)) {
return newNodeList;
}
Node node = children.get(i);
if (node.getType() == "B") {
newNodeList.addFirst(node);
} else if (node.getType() == "A") {
children.remove(i);
node.setChildren(new ArrayList<>(newNodeList));
newNodeList.clear();
newNodeList.addFirst(node);
}
return convertList(children, i, newNodeList);
}
要调用此方法,请执行 -
allNodes.remove(firstNode);
LinkedList<Node> newNodeList = new LinkedList<>();
convertList(allNodes, allNodes.size(), newNodeList);
firstNode.setChildren(newNodeList)