0

5 の倍数である b ツリー ルートからノードへのパスを見つけるためのプログラムを実装するのに苦労しています。

例:

     12
    /  \
   4    7
  /\    /\
 5  3  4 10

これを木と考えてください。プログラムは印刷する必要があります

12 -> 4 -> 5

12 -> 7 -> 10

編集:

はい、試してみましたが、以下は私がフォローしているアルゴリズムです: 順番にトラバースし、5 の倍数の値を比較します。そうであれば、LinkedList にノードを追加し始め、そのリストを返します。しかし、このアプローチは、5 の倍数が 1 つある場合にのみ機能します。それ以上の倍数がある場合は失敗します。

以下は私が試したことです:

LinkedList<Integer> getPaths(Node parent, int multiple){

    if(parent == null)
        return null;

    LinkedList list = new LinkedList();
    list = getPaths(parent.getLeftChild(), 5);


    if(parent.getSID() % multiple == 0){
        list.add(parent.getSID());
        return list;
    }

    list = getPaths(parent.getRightChild(),5);

    if(list != null)
        list.add(parent.getSID());

    return list;

}
4

1 に答える 1

0

問題は、次の場合です。

list = getPaths(parent.getRightChild(), 5);

ここで返された値を上書きします。

list = getPaths(parent.getLeftChild(), 5);

LinkedList<LinkedList<Integer>>すべてのパスを保存するには、おそらく が必要です。

グローバルリストのいずれか:

LinkedList<LinkedList<Integer>> globalList;
LinkedList<Integer> getPaths(Node parent, int multiple)

またはリストを渡します:

LinkedList<Integer> getPaths(Node parent, int multiple,
                             LinkedList<LinkedList<Integer>> bigList)

ただし、これを機能させるには、現在のプログラムにかなりの変更を加える必要があります。特定の時点でリストをコピーし、おそらくリストを作成する順序を切り替える必要があります (ボトムアップからトップへの作成に変更します)。下)。

于 2013-03-04T11:46:48.543 に答える