AVL 樹定義:任意節點左右子樹高度差 ≤ 1。給定 n 個節點,求不同形態的 AVL 樹數量。例:n=10 時答案為 60。要求高時間效率。
設 `dp[n][h]` 為節點數為 n、高度為 h 的 AVL 樹數量。
考慮根節點左右子樹高度組合:
合併:
dp[n][h] = Σ dp[m1][h-1] * dp[m2][h-1] // 兩邊高度相同
+ 2 * Σ dp[m3][h-1] * dp[m4][h-2] // 高度差 1
其中 `m1+m2 = n-1`,`m3+m4 = n-1`,且所有 `m ≥ 0`。
對給定 n,答案為 `Σ_h dp[n][h]`(所有可能高度之和)。
AVL 樹計數是經典的「樹形 DP + 高度狀態」問題。掌握「以高度為維度」的 DP 設計思路,可解決多類平衡樹計數變體。