0

私は再帰的な方法に取り組んでいます...

public BinaryTree<T> TreeMirror ( BinaryTree<T> tree ) {
   BinaryTree mirror = new BinaryTree();
   mirror = clone(tree);
   ...
   TreeMirror(...)
   ...
} 

メソッドが各再帰ステップでmirror異なるオブジェクトを参照したり、最初の反復後にステートメントを繰り返したりすることは望んでいません。のインスタンスが既に初期化されているかどうかを確認するために、if ステートメント チェックを入れることが可能かどうか疑問に思っています。その場合、 andステートメントはスキップされます。BinaryTreemirror = clone(tree)mirrormirror = new BinaryTree()mirror = clone(tree)

メソッドに引数として渡すか、クラス定義で定義しない限り、これは不可能だと思いmirrorます...しかし、確認したいと思います。

どんなアドバイスでも大歓迎です。

- - - - -編集 - - - - - -

メソッドのシグネチャを変更することは許可されていないため、実装でオブジェクトを渡すことはできません。ミラー ツリーを作成することはできますが、元のツリーをミラーに変更することは避けたいと考えています。渡された元のツリーのミラーである新しいオブジェクトを作成しようとしましたBinaryTreeが、再帰的に行う方法が実際にはわかりません。

4

4 に答える 4

2

そのような公開再帰関数はめったにありません。より良い解決策は、オブジェクトを作成し、必要な変更を行うだけの再帰的なプライベート関数を呼び出す public メソッドを持つことです。

通常、再帰関数のシグネチャをクライアントに表示したいものと一致させることは困難です。

于 2009-04-02T01:51:03.880 に答える
1

ミラー変数はメソッドに対してローカルであり、呼び出しごとに常に初期化されます。

メソッドへの引数として mirror を渡すことは、非常に良いオプションです。

編集: メソッドの署名を変更できない場合は、プライベート メソッドを作成し、それを呼び出して再帰を実行できますか?

于 2009-04-02T01:49:33.057 に答える
0

「ミラーを引数としてメソッドに渡すか、クラス定義で定義しない限り、これは不可能だと思います...しかし、確認したいのです。」

mirror は再帰不変式ではないため、正しい方法です。

もう1つの方法は、再帰アルゴリズムがサブツリー全体ではなくノードのみを複製することです。

于 2009-04-02T01:50:38.140 に答える