2014-11-09 4 views
0

У меня есть следующее n-арное дерево. Значение в узлах имеет вид имена {count}. Значение счета любого узла - это количество путей, которые включают узел.Печать всех путей в n-арном дереве в соответствии с их количеством

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

[EDIT] Пробовал следующее. Вызывается функция toString (отступ, узел) с использованием цикла, который запускает число root.count. Но не знаю, как остановиться после пути (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

Вам необходимо указать какой-либо код, показывающий, что вы пробовали, или вопрос о том, какая часть проблемы вам непонятна. Люди не собираются писать код для вас без каких-либо усилий с вашей стороны. – Travis

+0

@Travis: Обновлен вопрос с кодом. Вы можете мне помочь. – GvanJoic

ответ

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

     } 
     } 
    } 

Пожалуйста Смотрите к нему, он будет полезным для вас, потому что я сделал это earlier.Assuming у вас есть Класс узла и его полей :). У нас отличный день.

Смежные вопросы