go语言函数间如何共享变量

go语言函数间维护公共变量通常有三种办法:

1.全局变量(此方法在leetcode中老是报错)
2.函数内部定义函数,嵌套调用,嵌套的函数可以使用上层的变量
3.使用指针,使用指向同一个变量的指针

1.全局变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var list []int
func checkEqualTree(root *TreeNode) bool {
total := sum(root)
list = list[:len(list)-1]
if total%2 == 0 {
for _, v := range list {
if v == total/2 {
return true
}
}
}
return false
}
func sum(root *TreeNode) int {
if root == nil {
return 0
}
tmp := sum(root.Left) + sum(root.Right) + root.Val
list = append(list, tmp)
return tmp
}

2.函数内部定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func checkEqualTree(root *TreeNode) bool {
var list []int
var sum func(root *TreeNode)int
sum = func(root *TreeNode) int {
if root == nil {
return 0
}
tmp := sum(root.Left) + sum(root.Right) + root.Val
list = append(list, tmp)
return tmp
}
total := sum(root)
list = list[:len(list)-1]
if total%2 == 0 {
for _, v := range list {
if v == total/2 {
return true
}
}
}
return false
}

3.使用指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func checkEqualTree(root *TreeNode) bool {
list := []int{}
total := sum(root, &list)
list = list[:len(list)-1]
if total%2 == 0 {
for _, v := range list {
if v == total/2 {
return true
}
}
}
return false
}
func sum(root *TreeNode, list *[]int) int {
if root == nil {
return 0
}
tmp := sum(root.Left, list) + sum(root.Right, list) + root.Val
*list = append(*list, tmp)
return tmp
}