【Golang】LeetCode-剑指Offer-面试题34-二叉树中和为某一值的路径
2020-03-05 01:26
567 查看
题目
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。
从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:
给定如下二叉树,以及目标和 sum = 22,
5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1
返回:
[ [5,4,11,2], [5,8,4,5] ]
提示:
节点总数 <= 10000
解题思路
- 先序遍历,arr 记录节点的路径 退出条件:root == nil 当前节点为空
- 每次将当前节点放入当前保存的路径 判断当前节点是否是叶节点: root.Left == nil && root.Right == nil 是:将符合的路径放入结果中
dfs(root.Right,sum - root.Val,arr,ret)
-
否:继续遍历左子树和右子树直到叶节点
-
得到的路径符合要求时,创建一个新的切片,拷贝当前路径到其中,并添加到 ret 中
代码
–执行用时:4 ms --内存消耗:4.5 MB
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func pathSum(root *TreeNode, sum int) [][]int { if root == nil { return nil } var ret [][]int dfs(root,sum,[]int{},&ret) return ret } func dfs(root *TreeNode,sum int,arr []int,ret *[][]int){ if root == nil{ return } arr = append(arr,root.Val) if root.Val == sum && root.Left == nil && root.Right == nil { //slice是一个指向底层的数组的指针结构体 //因为是先序遍历,如果 root.Right != nil ,arr 切片底层的数组会被修改 //所以这里需要 copy arr 到 tmp,再添加进 ret,防止 arr 底层数据修改带来的错误 tmp := make([]int,len(arr)) copy(tmp,arr) *ret = append(*ret,tmp) } dfs(root.Left,sum - root.Val,arr,ret) dfs(root.Right,sum - root.Val,arr,ret) arr = arr[:len(arr)-1] }
在LeetCode该题中,我也有提交题解,欢迎查看。昵称:Sakura。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【剑指offer】面试题34:二叉树中和为某一值的路径
- 二叉树中和为某一值的路径(剑指offer 面试题34)
- 牛客剑指Offer面试题34:二叉树中和为某一值的路径
- 剑指offer面试题25:二叉树中和为某一值得路径
- 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
- 【面试题】剑指Offer-25-二叉树中和为某一路径的值
- 剑指offer——面试题25:二叉树中和为某一值的路径
- 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
- 剑指offer-面试题25-二叉树中和为某一值的路径
- [剑指Offer] 34_二叉树中和为某一值的路径
- 剑指Offer之面试题25:二叉树中和为某一值的路径
- 剑指offer-面试题25-二叉树中和为某一值的路径
- 剑指offer面试题25:二叉树中和为某一值的路径
- 剑指Offer面试题25(Java版):二叉树中和为某一值的路径
- 剑指offer 面试题25 二叉树中和为某一值的路径-Java实现
- 剑指offer面试题25-二叉树中和为某一值的路径
- 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)
- 剑指Offer_面试题25_二叉树中和为某一值的路径
- 【剑指offer】4.3举例让抽象问题具体化——面试题25:二叉树中和为某一值的路径
- [剑指offer][面试题25]二叉树中和为某一值得路径