剑指offer——JZ84 二叉树中和为某一值的路径(三) 解题思路与具体代码【C++】

2023-10-11 20:28

本文主要是介绍剑指offer——JZ84 二叉树中和为某一值的路径(三) 解题思路与具体代码【C++】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目描述与要求

二叉树中和为某一值的路径(三)_牛客题霸_牛客网 (nowcoder.com)

题目描述

给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。

1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点

2.总节点数目为n

3.保证最后返回的路径个数在整形范围内(即路径个数小于2的31次方-1)

数据范围:

0<=n<=1000

−109<=节点值<=109

假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求

示例

示例1:

输入:{1,2,3,4,5,4,3,#,#,-1},6

返回值:3

说明:如图所示,有3条路径符合

示例2:

输入:{0,1},1

返回值:2

示例3:

输入:{1,#,2,#,3},3

返回值:2


二、解题思路

根据题目描述,我们要找出二叉树中所有满足结点值之和等于sum的路径,也就是不要求路径的起点必须为根结点,也不要求路径的终点必须为叶子结点,所以任何结点都能成为起点/终点。

解决这一问题,还是采用递归的思想,我们从根结点开始对整个二叉树进行遍历,每经过一个结点就将sum减去对应结点的值,当找到符合要求的路径时res++,然后接着访问下一个分支,直至整个二叉树访问结束,即可得到以根结点开始的符合要求的路径;然后就是切换根结点,使得每个结点都成为新的根结点并且以此来遍历二叉树来寻找路径;一直到所有结点都当过根结点后,即可返回结果。

递归结束的条件就是访问到空节点;解决这一问题有两个地方需要进行递归,一个就是访问路径,一个就是更新根结点。


三、具体代码

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @param sum int整型 * @return int整型*/int res=0;void dfs(TreeNode* root,int sum){if(root==nullptr) return;//符合要求if(sum==root->val) res++;//进入子节点继续找dfs(root->left,sum-root->val);dfs(root->right,sum-root->val);}int FindPath(TreeNode* root, int sum) {if(root==nullptr) return res;dfs(root,sum);//以每个结点为新的根结点进行遍历FindPath(root->left, sum);FindPath(root->right, sum);return res;}
};

这篇关于剑指offer——JZ84 二叉树中和为某一值的路径(三) 解题思路与具体代码【C++】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/190609

相关文章

jupyter代码块没有运行图标的解决方案

《jupyter代码块没有运行图标的解决方案》:本文主要介绍jupyter代码块没有运行图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录jupyter代码块没有运行图标的解决1.找到Jupyter notebook的系统配置文件2.这时候一般会搜索到

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

详解C++中类的大小决定因数

《详解C++中类的大小决定因数》类的大小受多个因素影响,主要包括成员变量、对齐方式、继承关系、虚函数表等,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 非静态数据成员示例:2. 数据对齐(Padding)示例:3. 虚函数(vtable 指针)示例:4. 继承普通继承虚继承5.

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La