缘由
一道 leetcode 题目路径总和 II,引发了我对 slice 的思考,题目注解如下:
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
整体来看这道题通过一个对二叉树的深度优先遍历即可求解,只是关注所给函数的返回值类型 [][]int
一个二维切片;故在遍历至叶子结点时,保存与目标值相同的此次路径节点即可。
下面先放上贴自己的解:
type TreeNode struct {
Val int
Left, Right *TreeNode
}
// pathSum 总的思路还是走 dfs 递归遍历并存储每次判断相等的路径切片
func pathSum(root *TreeNode, targetSum int) [][]int {
// 返回值结果
res := make([][]int, 0)
var DFS func(*TreeNode, int, []int)
// DFS 仅在某叶子节点判断符合后进行结果保存
DFS = func(curNode *TreeNode, curSum int, pathNums []int) {
if curNode == nil {
return
}
// 如果此处不生成新的切片(该切片指其指针指向新一块内存)则遍历过程中将导致紊乱
newPath := make([]int, 0)
newPath = append(newPath, pathNums...)
newPath = append(newPath, curNode.Val)
// 如果是叶子节点
if curNode.Left == nil && curNode.Right == nil {
if curSum == curNode.Val {
res = append