剑指Offer 34. 二叉树中和为某一值的路径
1.LeetCode 剑指 Offer 03. 数组中重复的数字2.LeetCode 剑指 Offer 04. 二维数组中的查找3.LeetCode 剑指 Offer 08. 二叉树的下一个节点4.LeetCode 剑指 Offer 12. 矩阵中的路径5.LeetCode 剑指 Offer 11. 旋转数组的最小数字6.LeetCode 剑指 Offer 13. 机器人的运动范围7.剑指Offe 14- I. 剪绳子8.剑指Offer 14- II. 剪绳子 II9.剑指Offer 15. 二进制中1的个数10.剑指Offer 16. 数值的整数次方11.剑指Offer 17. 打印从1到最大的n位数12.剑指Offer 18. 删除链表的节点13.剑指Offer 20. 表示数值的字符串14.剑指Offer 21. 调整数组顺序使奇数位于偶数前面15.剑指Offer 22. 链表中倒数第k个节点16.剑指Offer 25. 合并两个排序的链表17.剑指Offer 26. 树的子结构18.剑指Offer 27. 二叉树的镜像19.剑指Offer 28. 对称的二叉树20.剑指Offer 29. 顺时针打印矩阵21.剑指Offer 30. 包含min函数的栈22.剑指Offer 31. 栈的压入、弹出序列23.剑指Offer 32 - I. 从上到下打印二叉树24.剑指Offer 32 - II. 从上到下打印二叉树 II25.剑指Offer 32 - III. 从上到下打印二叉树26.剑指Offer 33. 二叉搜索树的后序遍历序列
27.剑指Offer 34. 二叉树中和为某一值的路径
28.剑指Offer 35. 复杂链表的复制29.剑指Offer 42. 连续子数组的最大和30.剑指Offer 45. 把数组排成最小的数31.剑指Offer 32.剑指Offer 43. 1~n 整数中 1 出现的次数33.剑指 Offer 46. 把数字翻译成字符串34.剑指 Offer 47. 礼物的最大价值35.剑指Offer 48. 最长不含重复字符的子字符串36.剑指 Offer 49. 丑数37.剑指 Offer 50. 第一个只出现一次的字符38.剑指 Offer 51. 数组中的逆序对39.剑指 Offer 52. 两个链表的第一个公共节点40.剑指 Offer 53 - I. 在排序数组中查找数字 I41.剑指 Offer 53 - II. 0~n-1中缺失的数字42.剑指 Offer 54. 二叉搜索树的第k大节点43.剑指 Offer 55 - I. 二叉树的深度44.剑指 Offer 55 - II. 平衡二叉树45.剑指 Offer 56 - I. 数组中数字出现的次数46.剑指 Offer 57 - II. 和为s的连续正数序列47.剑指 Offer 56 - II. 数组中数字出现的次数 II48.剑指 Offer 58 - II. 左旋转字符串49.剑指 Offer 59 - I. 滑动窗口的最大值50.剑指 Offer 60. n个骰子的点数51.剑指 Offer 61. 扑克牌中的顺子52.剑指 Offer 62. 圆圈中最后剩下的数字53.剑指 Offer 63. 股票的最大利润54.剑指 Offer 64. 求1+2+…+n55.剑指 Offer 65. 不用加减乘除做加法56.剑指 Offer 66. 构建乘积数组57.剑指 Offer 67. 把字符串转换成整数58.剑指 Offer 68 - I. 二叉搜索树的最近公共祖先59.剑指 Offer 68 - II. 二叉树的最近公共祖先题目链接: 剑指Offer 34. 二叉树中和为某一值的路径
题目描述:
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。
解法思路:
本题比较简单,就是一个遍历、回溯,在遍历的过程中,将非叶子节点的值都加到路径中,直到叶子节点的时候,判断当前路径的和是否与target相等,
- 相等,就将当前路径加到结果集中;
- 不相等,就递归下一层;
- 最后恢复现场;
代码:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var res [][]int
var path []int
func pathSum(root *TreeNode, target int) [][]int {
res =[][]int{}
path = []int{}
dfs(root,target,0)
return res
}
func dfs(root *TreeNode, t int,sum int){
if root == nil {
return
}
sum += root.Val
path = append(path,root.Val)
if root.Left == nil && root.Right == nil {
if sum == t{
tmp := make([]int,len(path))
copy(tmp,path)
res = append(res,tmp)
}
}
dfs(root.Left,t,sum)
dfs(root.Right,t,sum)
path = path[:len(path)-1]
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~