巡回処理は、
・先行順=行きがけ順
・中間順=対称順=通りがけ順(二分木のみ)
・後行順=帰りがけ順
の3タイプ。
再帰呼び出しで関数を定義すれば、以下のように記述位置だけで使い分けができる。
<先行順>
巡回処理(現在要素)
{
現在要素処理
巡回処理(左要素)
巡回処理(右要素)
}
<中間順>
巡回処理(現在要素)
{
巡回処理(左要素)
現在要素処理
巡回処理(右要素)
}
<後行順>
巡回処理(現在要素)
{
巡回処理(左要素)
巡回処理(右要素)
現在要素処理
}
一般木について、
・リストとは別モノなので先頭にダミーは不要。
・再帰呼び出しを使わない場合はやや煩雑。
<先行順>
1.処理
2.子ノード有なら子ノードへ移動し1.へ
3.親ノード有なら親ノードへ移動し3.へ
4.弟ノード有なら弟ノードへ移動し1.へ
5.親ノード無・弟ノード無で終了
<後行順>
1.子ノード有なら子ノードへ移動し1.へ
2.処理
3.親ノード有なら親ノードへ移動し2.へ
4.弟ノード有なら弟ノードへ移動し1.へ
5.親ノード無・弟ノード無で終了
・先行順=行きがけ順
・中間順=対称順=通りがけ順(二分木のみ)
・後行順=帰りがけ順
の3タイプ。
再帰呼び出しで関数を定義すれば、以下のように記述位置だけで使い分けができる。
<先行順>
巡回処理(現在要素)
{
現在要素処理
巡回処理(左要素)
巡回処理(右要素)
}
<中間順>
巡回処理(現在要素)
{
巡回処理(左要素)
現在要素処理
巡回処理(右要素)
}
<後行順>
巡回処理(現在要素)
{
巡回処理(左要素)
巡回処理(右要素)
現在要素処理
}
一般木について、
・リストとは別モノなので先頭にダミーは不要。
・再帰呼び出しを使わない場合はやや煩雑。
<先行順>
1.処理
2.子ノード有なら子ノードへ移動し1.へ
3.親ノード有なら親ノードへ移動し3.へ
4.弟ノード有なら弟ノードへ移動し1.へ
5.親ノード無・弟ノード無で終了
<後行順>
1.子ノード有なら子ノードへ移動し1.へ
2.処理
3.親ノード有なら親ノードへ移動し2.へ
4.弟ノード有なら弟ノードへ移動し1.へ
5.親ノード無・弟ノード無で終了