1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package main
- 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++ {
-
-
- 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
- }
|