根据计数打印n-ary树中的所有路径

时间:2014-11-09 15:15:27

标签: java tree tree-traversal

我有以下n-ary树。节点中的值的格式为 names {count} 。任何节点的计数值都是包含该节点的路径数。

enter image description here

我需要打印树中的所有路径(从根到叶),直到该节点的计数变为零。一旦节点的计数为零,则打印仅到达其前任的路径(假设它们的计数大于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;
}

提前致谢。

1 个答案:

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

        }
        }
    }

请看它,它会对你有所帮助,因为我之前做过。假设你有一个节点及其字段:)。 祝你有个美好的一天。