| 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()
 
- // 	}
 
- // }
 
 
  |