トップページに戻る
次のPHPのサンプルへ
前のPHPのサンプルへ
Q25 左右対称の二分探索木
PHPのソース
<?php
// 場合の数[部分木のノード数] の配列
$PatternCntArr = array();
$PatternCntArr[0] = 1;
$PatternCntArr[1] = 1;
for($I = 2 ; $I <= 19 ; $I++){
$PatternCntArr[$I] = 0;
//頂点の分を引いたノード数
$NodeCnt = $I - 1;
// 左部分木のノード数でループ
for($J = 0 ; $J <= $NodeCnt ; $J++){
$RightNodeCnt = $NodeCnt - $J;
$PatternCntArr[$I] += $PatternCntArr[$J] * $PatternCntArr[$RightNodeCnt];
}
printf('ノード数%02dだと、%d通り' , $I , $PatternCntArr[$I]);
echo PHP_EOL;
}
実行結果
ノード数02だと、2通り
ノード数03だと、5通り
ノード数04だと、14通り
ノード数05だと、42通り
ノード数06だと、132通り
ノード数07だと、429通り
ノード数08だと、1430通り
ノード数09だと、4862通り
ノード数10だと、16796通り
ノード数11だと、58786通り
ノード数12だと、208012通り
ノード数13だと、742900通り
ノード数14だと、2674440通り
ノード数15だと、9694845通り
ノード数16だと、35357670通り
ノード数17だと、129644790通り
ノード数18だと、477638700通り
ノード数19だと、1767263190通り
解説
動的計画法で解いてます。