我正在尝试编写一个程序来查找二叉树中的所有从根到叶的路径,其中每个路径的总和等于给定的总和。
以下是我想出的代码
package main
import (
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func main() {
root := TreeNode{
Val : 5,
Left: &TreeNode {
Val : 4,
Left : &TreeNode {
Val : 11,
Left : &TreeNode { Val : 2},
Right : &TreeNode { Val : 7},
},
},
}
paths := [][]int{}
pathSumRecursive(&root, 22, []int{}, &paths)
fmt.Println("paths:", paths)
}
func pathSumRecursive(root *TreeNode, sum int, currentPath []int, paths *[][]int) {
if root == nil {
return
}
currentPath = append(currentPath, root.Val)
if root.Left == nil && root.Right == nil && root.Val == sum {
*paths = append(*paths, currentPath)
fmt.Println("paths updated ", *paths)
return
}
pathSumRecursive(root.Left, sum-root.Val, currentPath, paths)
pathSumRecursive(root.Right, sum-root.Val, currentPath, paths)
}
该程序的输出是
paths updated [[5 4 11 2]]
paths: [[5 4 11 7]]
我不明白的是附加的值,paths它只[5 4 11 2]更新了一次。那么是什么导致2(最后一个元素)更新为7?
我知道切片是按值传递的,切片值是标题,描述了支持数组的连续部分。但是我仍然不明白该值是如何在随后的递归中被替换的。
偶然的你
相关分类