[Day33-01]-[二叉树] 路径总和
作者:方勇(gopher)
- 2022 年 5 月 02 日
本文字数:1237 字
阅读完需:约 4 分钟
113. 路径总和 II
难度中等 737 收藏分享切换为英文接收动态反馈
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]
复制代码
示例 2:
输入:root = [1,2,3], targetSum = 5输出:[]
复制代码
示例 3:
输入:root = [1,2], targetSum = 0输出:[]
复制代码
题解:
注意 Golang 中,切片复制,按值或引用复制的区别。
func TestPathSum(t *testing.T) { var root = &TreeNode{ Val: 5, Left: &TreeNode{ Val: 4, Left: &TreeNode{ Val: 11, Left: &TreeNode{ Val: 7, }, Right: &TreeNode{ Val: 2, }, }, }, Right: &TreeNode{ Val: 8, Left: &TreeNode{ Val: 13, }, Right: &TreeNode{ Val: 4, Left: &TreeNode{ Val: 5, }, Right: &TreeNode{ Val: 1, }, }, }, } var targetSum = 22 var routes = [][]int{} var path = []int{} var dfs func(root *TreeNode, sum int) // DLR 遍历 dfs = func(root *TreeNode, sum int) { if root == nil { // 递归终止条件 return } path = append(path, root.Val) // 将值放入到路径中 defer func() { // 每次回溯结束的时候哦回到上个位置 path = path[:len(path)-1] }() sum += root.Val // 累加值 if root.Left == nil && root.Right == nil && sum == targetSum { // 到达叶子节点的时候处理逻辑 // routes = append(routes, path) 这种写法是错误的是,这种复制是按引用复制,path如果修改会影响route routes = append(routes, append([]int{}, path...)) // 按值复制 或者 copy 深度复制 } dfs(root.Left, sum) dfs(root.Right, sum) } dfs(root, 0) t.Log(routes)}复制代码
题解二: 更容易想到
func TestPathSum(t *testing.T) { var root = &TreeNode{ Val: 5, Left: &TreeNode{ Val: 4, Left: &TreeNode{ Val: 11, Left: &TreeNode{ Val: 7, }, Right: &TreeNode{ Val: 2, }, }, }, Right: &TreeNode{ Val: 8, Left: &TreeNode{ Val: 13, }, Right: &TreeNode{ Val: 4, Left: &TreeNode{ Val: 5, }, Right: &TreeNode{ Val: 1, }, }, }, } var routes = [][]int{} var targetSum = 22 var dfs func(root *TreeNode, path []int, sum int) dfs = func(root *TreeNode, path []int, sum int) { if root == nil { return } path = append(path, root.Val) sum += root.Val if root.Left == nil && root.Right == nil { if sum == targetSum { tmp := make([]int, len(path)) copy(tmp, path) routes = append(routes, tmp) } } dfs(root.Left, path, sum) dfs(root.Right, path, sum) } dfs(root, []int{}, 0) t.Log(routes)}复制代码
划线
评论
复制
发布于: 刚刚阅读数: 6
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!










评论