2016-10-21 9 views
0

私はこの木を持っている:ルートから任意のツリー上の与えられたノードへのパスを取得する方法は?

Harry(root) 
Jane 
    Joe 
    Diane 
     George 
      Jill 
       Carol 
     Mary 
    Mark 
Bill 
    Grace 

私は深さ優先探索を使用してこの機能をthis page

にコードを拡張しました。

public static int path(Tree t, String root, String n) 
{ 
    // Default traversal strategy is 'depth-first' 
    int counter = 0; 
    Iterator<Node> depthIterator = t.iterator(root); 
    while (depthIterator.hasNext()) { 
     Node node = depthIterator.next(); 
     if(node.getIdentifier().compareTo(n)==0) 
     { 
      System.out.println("Distance from " + root +" to " + n + " " + counter); 
      return counter; 
     } 
     counter++; 
     System.out.println(node.getIdentifier()); 
    } 
    return 0; 
} 

最終的な目標は、ルートとノードの間のパスの長さを見つけることです。この関数を実行すると、ルートとジョーからの距離と、ルートとダイアン(兄弟である)からの距離が異なります。これは、深さ優先検索のステップを数えるためです。 このアプローチは間違っているのですか、それを修正する方法ですか?

+0

深度の最初の検索のイテレータを使用することは重要ですか?私はイテレータがツリー内でジャンプするので問題になると思います(例えば、深さ5で、次のノードはルート(深さ1)の子です)。私は深さの数を含むあなた自身の深さの最初の検索を書くことは、既存のIteratorを使うよりも簡単だろうと思っています。 –

+1

ノードを知っているなら、それをスタックにプッシュできませんでしたか?その親に行き、ルートになるまでスタックにプッシュできませんでした。その後、スタック全体をポップして、 –

+1

@VenomFangs Nodeクラスに親がないようです(ノードはtheireの親を知らない)。彼らは子供たちだけを知っている。 –

答えて

0

深度を見つけるためのカウンターの使用が間違っています。あなたが示したコードでは、イテレータのアイテムだけを数えています。

path()メソッドを再帰的に呼び出させ、深さの値をメソッドのパラメータとして渡す必要があります。各再帰呼び出しの深さ値をインクリメントします。

関連する問題