面试经典(17)--二叉树中和为某一值的路径

java二叉树算法面试题大全含答案,月薪20k+的Java面试都问些什么 21二叉树算法刷题LeetCode中文版:二叉树。 阅读详情

题目描述:输入一棵二叉树和一个整数(假如为N),打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶子节点所经过的节点形成一条路径。

例如 输入整数22和如下二元树
      10   
      / \   
     5  12   
      / \    
      4    7
则打印出两条路径:10, 12和10, 5, 7。

分析与解法:

使用前序遍历,因为要求所有的满足条件的路径,必须遍历完整棵树。我们使用vector容器来保存路径,维护保存路径和的变量curSum,第一次遍历到一个节点就加入vector,curSum加上当前节点的值,如果当前curSum大于等于指定的N,并且当前节点不是叶子节点,那么要调用pop_back。我们还需要更深入的考虑一下退出条件,发现只要从一个节点的左右子树返回,就要弹出节点,因为前序遍历当中,一个节点的左右子树返回意味着经过当前节点的所有路径我们都遍历过了,所以自然要pop_back当前节点。比如10->5->4,当前和不满足条件,我们要回退,这个时候要pop_back弹出4。然后进入5的右子树,找到10->5->7满足条件,回退的时候我们要pop_back弹出7。由于5的左右子树全都返回,所以我们也要pop_back弹出5。

输出条件:路径和满足条件,并且是叶子节点。

另外再分析下curSum是要定义为局部变量还是放到参数里面。因为更深层次的子树需要知道这个值,所以放到参数里面。定义为int类型还是int&(c里面当然用int*代替啦)类型?其实无所谓,这个对算法正确性没有影响。

根据上述分析,代码如下:

struct Node
{
	Node* m_pLeft;
	Node* m_pRight;
	int m_value;
};

void allPath(Node *pRoot,vector<int>& v,int curSum,int expectedSum)
{
	if(pRoot==NULL)
	{
		return;
	}
	v.push_back(pRoot->m_value);
	curSum+=pRoot->m_value;
	//当前路径和大于等于指定值,且不是叶子节点
	if(curSum>=expectedSum && (pRoot->m_pLeft || pRoot->m_pRight))
	{
		v.pop_back();
		curSum-=pRoot->m_value;
	}

	//输出条件
	if(curSum==expectedSum && pRoot->m_pLeft==NULL && pRoot->m_pRight==NULL)
	{
		for(int i=0;i<v.size();i++)
			cout<<v[i]<<" ";
		cout<<endl;
	}
	//if判定条件可以不加,加上只是少一层递归而已,当然最好加上啦
	if(pRoot->m_pLeft)
		allPath(pRoot->m_pLeft,v,curSum,expectedSum);
	if(pRoot->m_pRight);
		allPath(pRoot->m_pRight,v,curSum,expectedSum);
	v.pop_back();
	curSum-=pRoot->m_value;
}


LeetCode 面试经典 150 题回顾 最经典 150 题,掌握面试所有知识点 面试经典 150 题 : 题目分析、解题思路、复杂度分析、代码展示 阅读详情

相关推荐

西门子1500T系列凸轮同步(CAMIN指令用法)

添加凸轮工艺对象(TO_CAM),也就是凸轮表。开始编程,先写2个轴的使能、回原点与主轴的定位。监控主轴与从轴的位置、速度关系是否满足实验要求。1.添加工艺对象(1个定位轴,1个同步轴)调用CAMIN指令 ,凸轮耦合。主轴为旋转轴且为模数轴。3.调用插补凸轮盘指令。4.仿真、监控、调试。

gyxgyx789的博客 1万+

面试题25:二叉树中和为某一值的路径

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。   算法思路: 先序遍历二叉树,并用一个vector模拟一个栈,记录路径,将访问过的结点的值放入,遍历的时候先计算当前路径上结点值的总和,并将结点的值放入vector,然后判断当前结点是否是叶子节点并且当前路径总和的值是否与要找的值相等,相等则打印vec

S-H_A-N 595

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1581

路径总和II

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / ...

Wang.T的博客 622

团结引擎+OpenHarmony 2实战篇:从零构建鸿蒙应用开发环境

本文详细介绍了如何从零开始构建鸿蒙应用开发环境,重点讲解了团结引擎与OpenHarmony 2的实战配置步骤。内容包括DevEco Studio安装、OpenHarmony SDK配置、团结引擎集成及项目创建等关键环节,帮助开发者快速搭建高效的开发环境,提升鸿蒙应用开发效率。

weixin_29294395的博客 262

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

面试题23:二叉树中和为某一值的路径

代码: #include "stdafx.h" #include #include using namespace std; struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; }; void FindPath(BinaryTreeNode *pRoot,

1037

ASPICE标准快速掌握「1.1. 简介」

ASPICE是汽车软件过程改进能力模型(Automotive SPICE,Automotive - Software Process Improvement and Capability dEtermination)的缩写,是一种针对汽车软件开发过程的国际标准。该标准旨在帮助汽车制造商和供应商改进其软件开发过程,以确保其软件产品的质量和安全性。需要做什么为什么要做技术上的依赖性是什么。

雪云飞星的博客 2291

LeetCode(合集) 路径总和(二叉树) golang copy的值复制

路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ ...

csdn_kou的博客 257

FPGA实现PCIe接口

PCI Express(PCIe)是一种高速串行计算机扩展总线标准,在FPGA中实现PCIe接口可以实现与主机系统的高速数据通信。以下是FPGA实现PCIe接口的关键技术要点。

whm128的博客 1459

基于Python的网贷平台数据爬虫实战:Scrapy+Selenium+反反爬策略

python复制下载# items.py本文详细介绍了如何使用Python构建一个完整的网贷平台数据爬虫系统,涵盖了从基础爬取到高级反反爬策略的全套解决方案。我们使用了Scrapy框架作为基础,结合Selenium处理动态内容,实现了多种反反爬策略,并探讨了分布式爬虫的实现方式。机器学习识别验证码基于深度学习的网页结构变化检测自动化行为模拟的更精细控制基于Kubernetes的弹性爬虫集群。

2201_76125261的博客 1560

【LeetCode-437】437.路径总和 III(从二叉树中找出路径和等于给定数值的路径总数)

路径总和 III 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。 思路一:dfs 解题思路 /** * Definition for a binary tree node. * public class TreeNode { * int val; * T

weixin_42956047的博客 507

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 618

别再翻了,面试二叉树看这 11 个就够了~

写在前边 数据结构与算法: 不知道你有没有这种困惑,虽然刷了很多算法题,当我去面试的时候,面试官让你手写一个算法,可能你对此算法很熟悉,知道实现思路,但是总是不知道该在什么地方写,而且很多边界条件想不全面,一紧张,代码写的乱七八糟。如果遇到没有做过的算法题,思路也不知道从何寻找。面试吃了亏之后,我就慢慢的做出总结,开始分类的把数据结构所有的题型和解题思路每周刷题做出的系统性总结写在了 Github...

小鹿动画学编程 12万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【面试题25】二叉树中和为某一值的路径

【题目描述】 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶节点所经过的结点形成一条路径。 【解决方案】 用栈来存储路径,递归调用来遍历各个路径,如果符合条件,则进行打印。 考虑测试用例: 1. 二叉树中有一条或多条符合条件的路径; 2. 二叉树中没有符合条件的路径; 3. 指向二叉树结点的指针为null; 我的代码实...

aejt95023的博客 163

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【面试题二十五】二叉树中和为某一值的路径

二叉树中和为某一值的路径 只有前序遍历,首先访问根结点。

zling_1989的专栏 1050

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

剑指offer 二叉树中和为某一值的路径

题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; ...

weixin_30918415的博客 75

[程序员面试题精选100题]4.二叉树中和为某一值的所有路径

【题目】 输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树                                             10                                            /   \

SmartSi 1967

面试题25 二叉树中和为某一值的路径

地址:http://ac.jobdu.com/problem.php?pid=1368 题目1368:二叉树中和为某一值的路径 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入: 每个测试案例包括n+1行: 第一行为2个整数n,k(1 接下来有n行。这n行中每行为

再见了,过去的名字,新的奋斗开始啦! 590

面试题 25 二叉树中的和为某一值的路径

题目: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 输入: 二叉排序树序列:8,2,7,10. 节点和:17 输出结果: 7 2 8 解题思路: 用递归的方式前序遍历从根节点往下寻找,每次向下寻找,我们就把找过的节点放入一个栈里面,并且用一个节点累加该节点的值,如果该值等于要找的整数

星宇宙的专栏 460

LeetCode刷题总结 - 面试经典 150 题 -持续更新

LeetCode刷题总结 - 面试经典 150 题 - 持续更新其他系列数组 / 字符串88. 合并两个有序数组27. 移除元素26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II169. 多数元素189. 轮转数组121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II55. 跳跃游戏274. H 指数380. O(1) 时间插入、删除和获取随机元素238. 除自身以外数组的乘积739. 每日温度42. 接雨水双指针125. 验证回文串392. 判断子序列167. 两数之和 II -

qq_45464560的博客 8746

面试题25.二叉树中和为某一值的路径

题目:输入一颗二叉树和一个整数,打印出二叉树中借点值得和为输入整数的所有路径。 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 二叉树结点定义: 1 struct BinaryTreeNode 2 { 3 int m_nValue; 4 BinaryTreeNode* m_pLeft; 5 BinaryTreeNode* m_pRight; ...

weixin_34372728的博客 141

剑指offer之【二叉树中和为某一值的路径】

题目:   二叉树中和为某一值的路径 链接:   https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca?tpId=13&tqId=11177&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-...

weixin_30556161的博客 76
上一篇: 面试经典(18)--重建二叉树
下一篇: 面试经典(16)--二叉树根节点到指定节点的路径
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值