-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLCCI0409-BSTSequences.go
More file actions
87 lines (80 loc) · 1.98 KB
/
LCCI0409-BSTSequences.go
File metadata and controls
87 lines (80 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package main
// 面试题 04.09. BST Sequences LCCI
// A binary search tree was created by traversing through an array from left to right and inserting each element.
// Given a binary search tree with distinct elements, print all possible arrays that could have led to this tree.
// Example:
// Given the following tree:
// 2
// / \
// 1 3
// Output:
// [
// [2,1,3],
// [2,3,1]
// ]
import "fmt"
// Definition for a binary tree node.
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func BSTSequences(root *TreeNode) [][]int {
res := [][]int{}
if root == nil {
res = append(res, []int{})
return res
}
queue := []*TreeNode{root}
var dfs func(queue []*TreeNode, list []int)
dfs = func(queue []*TreeNode, list []int) {
if len(queue) == 0 {
res = append(res, append([]int{}, list...))
return
}
i := 0
for i < len(queue) {
queue[i], queue[0] = queue[0], queue[i]
node := queue[0]
newQueue := queue[1:]
if node.Left != nil {
newQueue = append(newQueue, node.Left)
}
if node.Right != nil {
newQueue = append(newQueue, node.Right)
}
dfs(newQueue, append(list, queue[0].Val))
queue[i], queue[0] = queue[0], queue[i]
i++
}
}
dfs(queue, []int{})
return res
}
func main() {
// Example:
// Given the following tree:
// 2
// / \
// 1 3
// Output:
// [
// [2,1,3],
// [2,3,1]
// ]
tree1 := &TreeNode {
2,
&TreeNode{1, nil, nil, },
&TreeNode{3, nil, nil, },
}
fmt.Println(BSTSequences(tree1)) // [[2,1,3], [2,3,1]]
fmt.Println(BSTSequences(nil)) // [[]]
}