-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhr.go
51 lines (39 loc) · 1.08 KB
/
hr.go
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
func buildTree(root *Node, indexes [][]int32) *Node{
queue := make([]*Node, 0)
queue = append(queue, root)
for _,e := range indexes{
temp := queue[0]
queue = queue[1:]
if e[0] != -1 {
temp.Left = &Node{Info: e[0]}
queue = append(queue, temp.Left)
}
if e[1] != -1 {
temp.Right = &Node{Info: e[1]}
queue = append(queue, temp.Right)
}
}
return root
}
func swap(root *Node,k int32, level int32, list *[]int32){
if root == nil{
return
}
if level%k == 0{
root.Left, root.Right = root.Right, root.Left
}
swap(root.Left,k,level+1,list)
*list = append(*list, root.Info)
swap(root.Right,k, level+1,list)
}
func swapNodes(indexes [][]int32, queries []int32) [][]int32 {
root := &Node{Info: 1}
root = buildTree(root,indexes)
result := [][]int32{}
for _,k := range queries{
l := []int32{}
swap(root,k,1, &l)
result = append(result,l)
}
return result
}