用时: 抄答案才做出来

思路很容易看出来是利用递归,但是coding才是真正的问题。

我们需要返回的是根节点,但是递归是从下至上的

尝试用动态规划解决,dp(n) 是 dp(x) 与 dp (n - x - 1) 结果的组合

var allPossibleFBT = function(n) {
    var dp = []
    var buld = function (n) {
        for(let i = 1 ; i <= n ; i ++ ) {
            if (i === 1) {
                dp[i] = new TreeNode(0)
            } else if (i % 2 === 0) {
                dp[i] = undefined            } else {
                dp[i] = []
                for(let left = 1; left < i; left ++) {
                    var leftNodes = dp[left]
                    var rightNodes = dp[i - left - 1]
                    for(let j = 0 ; j < leftNodes.length ; j ++) {
                        for(let k = 0 ; k < rightNodes.length ; k ++) {
                            var node  = new TreeNode(0)
                            node.left = leftNodes[j]
                            node.right = rightNodes[k]
                            dp[i].push(node)
                        }
                    }
                }
            }
        }
    }
    buld(n)
    return dp[n]
};