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

运行结果:

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

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

相关推荐
黑听人3 小时前
【力扣 困难 C】329. 矩阵中的最长递增路径
c语言·leetcode
YuTaoShao4 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表
小小小新人121235 小时前
C语言 ATM (4)
c语言·开发语言·算法
你的冰西瓜6 小时前
C++排序算法全解析(加强版)
c++·算法·排序算法
এ᭄画画的北北6 小时前
力扣-31.下一个排列
算法·leetcode
绝无仅有7 小时前
企微审批对接错误与解决方案
后端·算法·架构
用户5040827858398 小时前
1. RAG 权威指南:从本地实现到生产级优化的全面实践
算法
Python×CATIA工业智造9 小时前
详细页智能解析算法:洞悉海量页面数据的核心技术
爬虫·算法·pycharm
Swift社区9 小时前
Swift 解 LeetCode 321:拼接两个数组中的最大数,贪心 + 合并全解析
开发语言·leetcode·swift