2011-01-04 9 views
0

私は木構造(正確には家系図)でリンクされたarraylistを持っています。各ノードは、世代フィールドを含むオブジェクトです。木の中で最も高い世代の葉を探したいと思います。私はこれを試してみました:n -aryツリー内で最高値を見つける

private int findHighestLeafGeneration(FamilyMember node, int gen){ 
     if(node.getChildren().isEmpty()){ 
      return gen; 
     } 

     for(int i = 0; i < node.getChildren().size(); i++){   
      gen = findHighestLeafGeneration(node.getChild(i), node.getChild(i).getGeneration()); 
     } 
     return gen; 
    } 

私はこのようなメソッドを呼び出す:これが行うことになっている何

findHighestLeafGeneration(node, node.getGeneration()); 

が家族のツリー(ノード)のメンバーを取り、そのためのすべての子孫を印刷していますメンバー。私のPrintDescendantsメソッドでは、印刷する世代数が必要です。

しかし、上記は少しバギーです。リーフ生成を取得し、リーフ生成を親ノード生成で上書きします。すべての手掛かりはなぜですか?

答えて

1

これを行う:

 
private int findHighestLeafGeneration(FamilyMember node) { 
    int gen = node.getGeneration(); 
    for(int i = 0; i < node.getChildren().size(); i++){ 
    int highestChild = findHighestLeafGeneration(node.getChild(i)); 
    if(highestChild > gen) { 
     gen = highestChild; 
    } 
    } 
    return gen; 
} 

+0

wow!すばらしいです!それは完璧に動作します! – user559142

+0

あなたがそれを気に入ってよかった!あなたが "最高"と言うが、>または<演算子を使用するコードのどこにもないときは、警告サインです。代わりにあなたが "最低"と答えた場合 - あなたのコードはどのように変わるでしょうか? –

+0

変数名をlowestChildに変更し、>を<に変換すると思います。 – user559142

関連する問題