私はバイナリツリーを作成しようとしています。私が与えたことは、ツリー内のノードの数だけです。私の頭に浮かぶ最初のことは、総ノード数の記録を保持するためにインデックス(BFS order)を使用し、再帰的定義を使用することです。ここに私の擬似コードがあります。固定サイズのバイナリツリーを作成する
N = 10 //binary tree total node count
i = 0 //global integer
function()
if i > N
return True
create node i
i = i + 1
function(i) //left
i = i + 1
function(i) //right
私は私は多分私は再帰ルールに違反していますように感じさせるこの定義ではグローバル変数を使用する必要があります。私がしていることをする良い方法はありますか?それが改善されるかどうか?
注:私はコードではなく理論的な方法について質問しています。
編集:このメソッドは失敗しました。私は提案のために開いています。
明示:このツリーの要件は、以前の深さがノードで満たされていない場合(すべてのノードに2つの子がある場合)、これを前に言及しないと私を許してください。私がコメントで言及したスタックは、それは質問とは何の関係もなく、繰り返し木をたどる規則的な方法です。
この質問は、ツリーを再帰的に生成する必要があるとは言いません。多分あなたはその質問を誤解しているかもしれません。生成されたツリーに関しては、左の子だけが作成されるため、基本的にリンクされたリストです。 'i'については、あなたのコードは正確ではありませんが、グローバル変数を持たない解の半分になっています。パラメータを指定せずに 'function'を定義しましたが、' i'をパラメータとして使用しています... – Paul
@Paul私は学習目的で再帰を使用することにしました。しかし反復的な方法もまた適用可能であり、プログラム内にスタックを定義する必要があります。 – Rockybilly
実際に何をしたいのかを明確にする必要があります。特に:木の要件は何ですか?ツリーに 'N + 1'ノードが含まれている点を除いて、アルゴリズムは完全に細かいツリーを作成します。そして、この質問はスタックと何が関係していますか? – Paul