leetcode刷題筆記九十六題 不同的二叉搜尋樹
阿新 • • 發佈:2020-07-31
leetcode刷題筆記九十六題 不同的二叉搜尋樹
源地址:96. 不同的二叉搜尋樹
問題描述:
給定一個整數 n,求以 1 ... n 為節點組成的二叉搜尋樹有多少種?
示例:
輸入: 3
輸出: 5
解釋:
給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹:1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3
/** 這題主要參考九十五題的思想,使用遞迴的方法會超時,故使用動態規劃 以1至n的每個結點作為root, 以左右子樹結點數對應dp值進行組合 初始狀態: dp(0) = 1, dp(1) = 1 狀態轉移方程:dp(n) = dp(0)*dp(n-1) + ... + dp(n-1)*dp(0) */ object Solution { def numTrees(n: Int): Int = { val dp = Array.fill(n+1)(0) if(n == 0) return 1 dp(0) = 1 dp(1) = 1 for(length <- 2 to n){ for(root <- 1 to length){ val left = root - 1 val right = length - root dp(length) += dp(left) * dp(right) } } return dp(n) } }