我有以下n-ary树。节点中的值的格式为 names {count} 。任何节点的计数值都是包含该节点的路径数。
我需要打印树中的所有路径(从根到叶),直到该节点的计数变为零。一旦节点的计数为零,则打印仅到达其前任的路径(假设它们的计数大于0)
上图的6条路径为
3-5-1-2-4-6
3-5-1-2
3-5-1-7
3-5-2
3-1-4
3-7
[编辑] 尝试以下操作。使用运行root.count次数的循环调用函数toString(indent,node)。但是不知道如何在一条路径(3-5-1-2-4-6)之后停下来没有更多的孩子。而是打印3-5-1-2-4-6-7-2-1-4-7。
public String toString(String indent, MyTree node) {
String output="";
while(node.count>0){
//output = indent + node.toString() + "\n";
output = indent + node.name;
node.count--;
//if(node.count==0) break;
String childsOutput = "";
for (MyTree child : node.childs) {
childsOutput += toString(indent + " ", child);
}
return output + childsOutput;
}
return output;
}
提前致谢。
答案 0 :(得分:1)
public void path_Extraction(Node root)
{
int i=0;
while(root.childs.size()!=0)
{
Node childs=root.childs.get(0);
while(childs.count!=0)
{ ArrayList<Node> path=new ArrayList<Node>();
ArrayList<Node> remove=new ArrayList<Node>();
i++;
extract(childs,path,remove);
paths.put(i,path);
Removing_node.remove.put(i, remove);
}
}
}
public void extract(Node childs,ArrayList<Node> path,ArrayList<Node> remove)
{
if(childs.count>1)
{
if(childs.childs.size()>0)
{
extract(childs.childs.get(0),path,remove);
childs.count--;
if(childs.count==0)
{
childs.parent.childs.remove(childs);
childs.parent=null;
path.add(childs);
remove.add(childs);
}
else
{
path.add(childs);
}
}
}
else
{
if(childs.childs.size()>0)
{
extract(childs.childs.get(0),path,remove);
childs.count--;
childs.parent.childs.remove(childs);
childs.parent=null;
path.add(childs);
remove.add(childs);
}
else
{
(childs.count)--;
childs.parent.childs.remove(childs);
childs.parent=null;
path.add(childs);
remove.add(childs);
}
}
}
请看它,它会对你有所帮助,因为我之前做过。假设你有一个节点及其字段:)。 祝你有个美好的一天。