1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package main
- /**
- * Definition for a binary tree node.
- * type TreeNode struct {
- * Val int
- * Left *TreeNode
- * Right *TreeNode
- * }
- */
- func generateTrees(n int) []*TreeNode {
- if n == 0 {
- return []*TreeNode{}
- }
- G := make([][]*TreeNode, n+1)
- G[0] = []*TreeNode{nil}
- G[1] = []*TreeNode{&TreeNode{1, nil, nil}}
- for i := 2; i <= n; i++ {
- G[i] = make([]*TreeNode, 0)
- for j := 1; j <= i; j++ {
- // G(i) = sum F(j, i)
- // F(j, i) = G(j-1) * G(i-j)
- for k := 0; k < len(G[j-1]); k++ {
- for l := 0; l < len(G[i-j]); l++ {
- right := copyAndAddBiTree(G[i-j][l], j)
- root := &TreeNode{j, G[j-1][k], right}
- G[i] = append(G[i], root)
- }
- }
- }
- }
- return G[n]
- }
- func copyAndAddBiTree(src *TreeNode, val int) *TreeNode {
- if src == nil {
- return nil
- }
- dst := TreeNode{src.Val + val, nil, nil}
- dst.Left = copyAndAddBiTree(src.Left, val)
- dst.Right = copyAndAddBiTree(src.Right, val)
- return &dst
- }
- // func main() {
- // for _, root := range generateTrees(3) {
- // printTree(root)
- // println()
- // }
- // }
|