本文主要是介绍树06--二叉树中和为某一值的路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
树06--二叉树中和为某一值的路径-jz24
- 题目概述
- 解析&参考答案
- 注意事项
- 说明
题目概述
- 算法说明
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 - 测试用例
输入1:
{10,5,12,4,7},22
输出1:
[[10,5,7],[10,12]]
输入2:
{10,5,12,4,7},15
输出2:
[]
解析&参考答案
- 解析
- 使用递归的方式,每次从根节点出发,每次递归的时候其sum减对应的节点值,sum值为0且该节点刚好为叶子节点的时候,该路径就满足要求;
- 参考答案
vim jz24.go
package mainimport "fmt"type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode
}func FindPath(root *TreeNode, expectNumber int) [][]int {result := make([][]int, 0)res := make([]int, 0)FindPathCore(root, expectNumber, res, &result)return result
}func FindPathCore(root *TreeNode, expectNumber int, res []int, result *[][]int) {if root == nil {return}expectNumber -= root.Valres = append(res, root.Val)if expectNumber == 0 && root.Left == nil && root.Right == nil {*result = append(*result, res)} else {FindPathCore(root.Left, expectNumber, res, result)FindPathCore(root.Right, expectNumber, res, result)}res = res[:len(res)-1]
}func main() {root := &TreeNode{10, &TreeNode{5, &TreeNode{4, nil, nil}, &TreeNode{7, nil, nil}},&TreeNode{12, nil, nil}}expectNumber := 22 // 15ret := FindPath(root, expectNumber)fmt.Println(ret)
}
注意事项
- 每次递归结束后需要去掉加入到res数组中最后一个元素。
说明
- 当前使用 go1.15.8
- 参考 牛客网--剑指offer
标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。
注意!!!
- 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
- 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
- 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解
这篇关于树06--二叉树中和为某一值的路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!