首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:求和路径

#yyds干货盘点# LeetCode程序员面试金典:求和路径

时间:2022-12-27 15:36:58浏览次数:45  
标签:yyds curr int 金典 sum ret prefix root LeetCode

题目:

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

示例:给定如下二叉树,以及目标和 ​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]

代码实现:

class Solution {
public int pathSum(TreeNode root, int sum) {
Map<Long, Integer> prefix = new HashMap<Long, Integer>();
prefix.put(0L, 1);
return dfs(root, prefix, 0, sum);
}

public int dfs(TreeNode root, Map<Long, Integer> prefix, long curr, int sum) {
if (root == null) {
return 0;
}

int ret = 0;
curr += root.val;

ret = prefix.getOrDefault(curr - sum, 0);
prefix.put(curr, prefix.getOrDefault(curr, 0) + 1);
ret += dfs(root.left, prefix, curr, sum);
ret += dfs(root.right, prefix, curr, sum);
prefix.put(curr, prefix.getOrDefault(curr, 0) - 1);

return ret;
}
}

标签:yyds,curr,int,金典,sum,ret,prefix,root,LeetCode
From: https://blog.51cto.com/u_13321676/5972847

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:插入
    题目:给定两个整型数字 N​ 与 M​,以及表示比特位置的 i​ 与 j(i<=j,且从0位开始计算)。编写一种方法,使 M​ 对应的二进制数字插入 N​ 对应的二进制数字的第 i......
  • #yyds干货盘点# 名企真题专题:小东分苹果
    1.简述:描述果园里有一堆苹果,一共n头(n大于1小于8)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份......
  • #yyds干货盘点# 名企真题专题:小易的升级之路
    1.简述:描述小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3.......
  • leetcode笔记——325周赛
    2515.到目标字符串的最短距离-力扣(LeetCode)这道题一次遍历就可以做,直接用abs(i-startindex)和n-abs(i-startindex)即可表示距离,但我做的时候绕麻烦了......
  • #yyds干货盘点#linux ls统计文件个数
    Linux下有三个命令:lsgrepwc通过这三个命令的组合可以统计目录下文件及文件夹的个数。统计当前目录下文件的个数(不包括目录)ls-l|grep"^-"|wc-l统计当前目录下文件的个数......
  • leetcode-541. 反转字符串 II
    541.反转字符串II-力扣(Leetcode)比较简单,想清楚边界条件,然后做一下字符的反转即可。go可以将不能变动的字符串转换成可以变动的[]byte之后,修改完之后,再转成string......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉搜索树序列
    题目:从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉搜索树 root,输出所有可能生成此树的数组。 示例1:......
  • #yyds干货盘点# LeetCode程序员面试金典:检查子树
    题目:检查子树。你有两棵非常大的二叉树:T1,有几万个节点;T2,有几万个节点。设计一个算法,判断T2是否为T1的子树。如果T1有这么一个节点n,其子树与T2一模一样,则T2为T1......
  • #yyds干货盘点# 名企真题专题:编码
    1.简述:描述假定一种编码的编码范围是a~y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下:a,aa,aaa,aaaa,aaab,aaac,……,b,ba,baa,b......
  • leetcode-17. 电话号码的字母组合
    17.电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应......