当前位置:网站首页>二叉树求和路径问题解答与注记
二叉树求和路径问题解答与注记
2022-08-03 17:55:00 【小问号我们是朋友】
给定题干:
给定一棵二叉树,其中每个节点都含有一个整数数值(该值或正或负)。设计一个算法,打印节点数值总和等于某个给定值的所有路径的数量。注意,路径不一定非得从二叉树的根节点或叶节点开始或结束,但是其方向必须向下(只能从父节点指向子节点方向)。
题目来源:
力扣(LeetCode)
1.示例
示例如下:
示例:
给定如下二叉树,以及目标和 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]
2.解答与注记
代码如下(Java):
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int pathSum(TreeNode root, int sum) {
//如果根节点为空,则返回0,表示无求和路径
if(root == null) {
return 0;
}
//从根节点开始,递归遍历每个节点
int ret = rootSum(root, sum);
//将根节点的叶子节点作为一个新的路径起点开始递归遍历,直至整个二叉树遍历完毕
ret += pathSum(root.left, sum);
ret += pathSum(root.right, sum);
return ret;
}
public int rootSum(TreeNode root, int sum) {
//如果根节点为空,则返回0,表示无求和路径
if(root == null) {
return 0;
}
int ret = 0;
//获取当前节点的值与给定值做比较,相等则求和路径数加一
int val = root.val;
if(val == sum) {
ret++;
}
//如果当前值与给定值不同则递归遍历该节点的子节点,直至到达二叉树的最底部
ret += rootSum(root.left, sum - val);
ret += rootSum(root.right, sum - val);
return ret;
}
}
总结
以上就是今天要讲的内容,本文介绍了二叉树求和路径的一种解法,在此备忘以供参考。
边栏推荐
猜你喜欢
随机推荐
Execution plan of mysql
【engine】RtcSyncCallback回调、回调容器RtcCallbackContainer及MediaPacketSenderImpl 中回调使用
cell delay and net delay
宝塔搭建企业招聘网站源码实测
关于 Intel 在 micro-vm 快速启动的探索及实例演示 | 第 36-38 期
借助Web3盘活日本优质IP:UneMeta 与 OpenSea 的差异化竞争
【JS】利用JS给删除按钮添加提示框
2021年数据泄露成本报告解读
rhel8.3 系统下修改有线网卡配置信息实现联网
Is OnePlus Ace worth buying?Use strength to interpret the power of performance
走进通信:为什么4G信号满格,却上不了网呢
多肽介导PEG磷脂——靶向功能材料之DSPE-PEG-RGD/TAT/NGR/APRPG
深度学习跟踪DLT (deep learning tracker)
EasyNTS上云网关断电重启后设备离线是什么原因?
5000元价位高性能轻薄本标杆 华硕无双高颜能打
opencv 直方图比较
es6新增-Promise详解(异步编程的解决方案1)
Web3 security risks daunting?How should we respond?
云渲染的优势与劣势
这是Facebook母公司 关于元宇宙的80万亿美元豪赌