LeetCode[面试题04.12]求和路径

难度:Medium

题目:

给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。


示例:

给定如下二叉树,以及目标和 sum = 22

复制代码
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1

返回:

复制代码
3
解释:和为 22 的路径有:[5,4,11,2], [5,8,4,5], [4,11,7]

提示:

  • 节点总数 <= 10000

Related Topics

  • 深度优先搜索
  • 二叉树

重点!!!解题思路

明确题目要求:路径不一定非得从根节点开始,可以从树中任意节点开始。

明确解题思路:正常使用dfs即可,当sum值减到0就说明有一条路线,然后枚举树中的每一 个节点即可

源码:

java 复制代码
    class Solution {
        public int pathSum(TreeNode root, int sum) {
            if (root == null) return 0;
            int l = pathSum(root.left, sum);
            int r = pathSum(root.right, sum);
            return l + r + getSum(root, sum);
        }

        public int getSum(TreeNode root, int sum) {
            if (root == null) return 0;
            sum -= root.val;
            return (sum == 0 ? 1 : 0) + getSum(root.left, sum) + getSum(root.right, sum);
        }
    }

运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧,喜欢练习算法那就点个攒吧

相关推荐
reikocao39 分钟前
大场景下 Hessian 特征值放大与退化检测
算法
hetao173383744 分钟前
2026-09-18 hetao1733837 的刷题记录
c++·算法
wuyk5551 小时前
21.计数排序:不用比较的“空间换时间”排序算法
python·算法·排序算法
Rabitebla1 小时前
【Linux系统编程】 指令(二):一条路径是怎么定位到文件的
linux·c++·笔记·学习·算法
库玛西1 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
木井巳1 小时前
【记忆化搜索】最长递增子序列
java·算法·leetcode·深度优先·剪枝·推荐算法
东方护航数据恢复(深圳)2 小时前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力
Omics Pro2 小时前
上海AI Lab孙思琦×高张阳:虚拟细胞代码库智能体
数据库·人工智能·算法·机器学习·自然语言处理
Y幽谷客2 小时前
图像识别入门习题整理
算法
点纭2 小时前
C 语言 第七章 常用函数(3)
c语言·开发语言·算法·oracle·c#