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);
        }
    }

运行结果:

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

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

相关推荐
小雉系统1 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
唐墨1235 小时前
linux kernel 比较数据大小的宏定义
linux·算法
拂拉氏6 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
通信小呆呆10 小时前
电子战抗干扰技术:当“不被干扰”成为一种系统
算法·通信·mimo·isac
笑容掩饰我的失落10 小时前
区块链从小白到精通(八):从零实现一个标准 ERC-20 代币(完整可运行代码)
算法·区块链·php·智能合约·哈希算法
Severus_black11 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
2601_9679791214 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔14 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆14 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac