ツリートラバーサルでの再帰実行の理解に問題があります。ここでツリートラバーサルでの再帰実行の理解
void travel (Node *tree)
{
if(tree!=NULL)
{
printf("%d ",tree->info);
travel(tree->left);
travel(tree->right);
}
}
あなたが説明することができ
1
2 3
4 5 6
出力:4に到達した後に何が起こる1 2 3 4 5 6
いどのようにコンパイラに無視旅行(TREE->左)とどのように1に戻って3に達するのですか?
私の正確な質問はどのように関数呼び出し旅行(木 - >左)は無視されるのですか?
ご返信ありがとうございます。 ""私たちが4になると、それ以上左の子供が残っていることがわかります。したがって、私たちは正しい子供を試していますが、正しい子供もいません。 ""ここで、コンパイラは、左と右のノードが単なる関数パラメータではないので、子がそこにいるのを知ることはできますか?私は右か左の子供が欠席しているかどうかを確認するための条件を意味するので、どうなるのでしょうか? –
こんにちは、このCコードで 'tree'は構造体へのポインタです(JSのコンストラクタ関数のように)。左右のプロパティも同様にポインタです。渡された引数が指すノードを処理するために、このポインタを 'travel(tree-> right)'のような 'travel'関数に渡すだけです。この場合、ノードの処理は、 'printf("%d "、tree-> info);'という命令を意味します。処理が終了したら、次のノードを引数として渡して、同じトラベル関数を別の呼び出しで呼び出します。 Cのポインタの詳細http://www.fredosaurus.com/notes-cpp/structs/arrow.html – Redu