var count = function(tree) {
var stack = [];
var count = 0;
for (var node = tree; node; count++, node = stack.pop()) {
if (node.left) stack.push(node.left);
if (node.right) stack.push(node.right);
}
return count;
};
上記のコードは機能し、バイナリ ツリー内のノードの数を返します。
これがどのように機能するかについて私は混乱しています。var stack = [];
空の配列を作成しませんか?
もしそうなら、ノードは for ループ内で設定されたときに 0 にならないので、両方の if ステートメントが false を返し、実行されませんか?
編集:node = stack.pop()
ループ本体が終了するまでコードが実行されないことに気付きました。したがって、その時点までのノードには、プロシージャに渡された現在のノードが含まれます (ヘッド ノードで始まります)。
ありふれた質問で申し訳ありません。寝る時間だと思います