找出二叉树中和为某值的所有路径

如何在二叉树中找出和为某一值的所有路径 本篇文章是对在二叉树中找出和为某一值的所有路径方法进行了详细的分析介绍,需要的朋友参考下 立即下载

问题是这样的,在一棵以root为根的树中,找出以root为起点的所有路径,要求路径中节点的值相加等于给定的数值。这个问题很简单,甚至于想都不用想就知道遍历树一遍就可以解决。

找出符合要求的路径,其实就是下面这个递归表达式:
1.求出以root为节点和等于v的路径;
2.如果root->value等于v,那么找到一条路径,返回;
3.如果root->value大于v,那么就分别找出以root左右孩子为根的和等于v – root->value的路径;
4.如果root->value小于v,那么就不存在符合条件的路径。
代码表示如下。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

struct tree {
	int value;
	struct tree *lchild;
	struct tree *rchild;
};

struct tree *insert(struct tree *root, int value)
{
	if (root) {
		if (value < root->value) {
			root->lchild = insert(root->lchild, value);
		} else {
			root->rchild = insert(root->rchild, value);
		}
	} else {
		root = new struct tree;
		root->value = value;
		root->lchild = 0;
		root->rchild = 0;
	}
	return root;
}

void print_tree_prefix(struct tree *root, string pfx)
{
	if (root) {
		if (root->lchild) {
			cout << pfx << "|" << endl;
			if (root->rchild) {
				cout << pfx << "|-<L> " << root->lchild->value << endl;
				print_tree_prefix(root->lchild, pfx + "|     ");
		    	} else {
				cout << pfx << "`-<L> " << root->lchild->value << endl;
			}
		}
		if (root->rchild) {
		    cout << pfx << "|" << endl;
		    cout << pfx << "`-<R> " << root->rchild->value << endl;
		    print_tree_prefix(root->rchild, pfx + "      ");
		}
	}
}

void print_tree(struct tree *root)
{
	if (root) {
	    cout << root->value << endl;
	    print_tree_prefix(root, "");
	}
}

string itos(int i)
{
	string str;
	stringstream s;
	s << i;
	s >> str;
	return str;
}

void sum_prefix(struct tree *root, int v, string pfx)
{
	if (root) {
		if (v == root->value) {
			cout << pfx << root->value << endl;
		} else if (v > root->value) {
			v -= root->value;
			pfx += itos(root->value) + "+";
			sum_prefix(root->lchild, v, pfx);
			sum_prefix(root->rchild, v, pfx);
		}
	}
}

void sum(struct tree *root, int v)
{
	if (root) {
		sum_prefix(root, v, itos(v) + "=");
	}
}

int main()
{
	struct tree *root = 0;
	root = insert(root,  10);
	root = insert(root,   5);
	root = insert(root,   4);
	root = insert(root,   7);
	root = insert(root,  12);
	root = insert(root,  23);
	root = insert(root,   1);
	root = insert(root,   6);
	root = insert(root,   2);
	print_tree(root);
	sum(root, 22);
	return 0;
}


S32DS IDE调试技巧:如何用Attach功能高效定位汽车电子MCU的Bootloader问题 本文详细介绍了在汽车电子MCU开发中,如何利用S32DS IDE的Attach调试模式高效定位Bootloader与应用程序的协同问题。通过对比常规调试与Attach模式的本质差异,并深入讲解工程配置、镜像合并及实战调试流程,帮助开发者在不复位、不重新下载程序的前提下,实时分析系统状态,快速解决内存映射冲突、中断向量表重定向等疑难杂症。 阅读详情

相关推荐

SAP 零售 FMS 物料主数据(一)

SAP 零售 FMS 物料主数据(一) SAP 对于鞋服行业最新的解决方案-FMS(相当于原来的AFS+Retail);更偏向与零售; 商品主数据与原来的AFS大不相同,取消了原来的Grid的网格概念,取而代之的是变式;商品主数据维护也偏向于Retail的维护模式;事物代码也不是MM01而是MM41 /MM46; 在维护商品主数据前,需要与商品部沟通定义各种商品相关的规范如编码规则,大中小类 ,颜色库,尺码库等,此处不赘述; 创建商品需要确定哪些物料是变式物料,哪些是常规不带特性的单一物料;这决定了在创建商

weixin_45518759的博客 5061

剑指 Offer 34. 二叉树中和为某一值的路径(C++) 回溯法+先序遍历

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: [ [5,4,11,2], [5,8,4,5] ] 提示: 节点总数 <= 10000 注意:本题与主站 113 题相同:https

伍粟的博客 311

STM32+Air724UG基于阿里云物联网平台的OTA远程升级实战指南

本文提供了一套基于STM32微控制器与Air724UG 4G Cat.1通信模组,通过阿里云物联网平台实现OTA远程升级的完整实战指南。文章详细阐述了BootLoader与用户程序的分工、云端配置、固件下载与烧写流程,并分享了关键代码实现与常见问题排查方法,帮助开发者快速为物联网设备部署稳定可靠的无线升级功能。

weixin_28285943的博客 513

在二叉树中找出和为某一值的所有路径

路径的起点为根节点,如        10                                                 /   \                                               5    12                                            /  \

bnufq的专栏 809

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。

归梦工作室 2788

如何优雅地进行频谱分析—— 一行代码实现绘制MATLAB频谱、功率谱图

之前的文章里讲了关于信号频谱、能量谱的相关理论和MATLAB编程实现方法: Mr.看海:信号频域分析方法的理解(频谱、能量谱、功率谱、倒频谱、小波分析) Mr.看海:频域特征值提取的MATLAB代码实现(频谱、功率谱、倒频谱) 不过对于刚刚开始进行这方面研究,或者对MATLAB不甚熟悉,抑或者不想花太多时间用在编程这件事上的同学,目前缺少一种足够便捷、高效、可靠的代码。 所以笔者想做这样一件事:编写一个函数,同学们只需要导入自己要分析的数据,并按照自己的需求设置部分选项,调用一行代码就可以实现绘制频

fengzhuqiaoqiu的博客 2万+

程序员面试题精选(4):在二元树中找出和为某一值的所有路径

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

yysdsyl的专栏 3038

【ART-Pi与RT-Thread入门】①ART-Pi上手初体验

文章目录关于ART-Pi实物照片板载资源、扩展接口及驱动支持扩展引脚默认固件蓝牙配网微信扫描二维码设备选择 ART-Pi,输入所要连接的 WIFI SSID 和密码配网成功会显示IP地址打开IP地址Finsh控制台配网WindowsmacOS 关于ART-Pi ART-Pi是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。 实物照片 板载资源、扩展接口及驱动支持 扩展引脚 其中P1排扩展引脚座兼容树莓派的扩展接口,并

SimonLiu的博客 5829

找出二叉树中和为某一定值的所有路径

题目如题所示,思路如下:

bob908的专栏 1137

Ollama安装教程

Ollama 是一个开源的大语言模型(LLM)部署工具,专为在本地机器部署和运行大模型而设计,通过简单的命令就可以在本地快速运行大模型(如DeepSeek、Llama、Gemma、QWQ等)。非常适合开发者、研究人员以及对数据安全和隐私有较高要求的企业和用户

学习AI应用开发,分享AI干货、获取最新AI咨询 3845

【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏(附项目源码)

当今游戏产业中,经典游戏的复刻一直是一项受欢迎且具有挑战性的任务。俄罗斯方块是一个深入人心、令人上瘾的经典游戏,在过去几十年里一直享有广泛的流行度。其简单而富有策略性的玩法吸引了无数玩家的关注。因此,我决定利用Unity引擎来复刻这款经典游戏,以让更多的人重新体验其中的乐趣。通过使用Unity引擎,我能够利用其强大的工具和功能,从头开始构建一个与原版俄罗斯方块游戏相似的游戏。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2794

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

牛客 找出二叉树中和为某一值的路径

/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { vector<...

weixin_30295091的博客 83

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

剑指offer34-AcWing-47. 二叉树中和为某一值的路径 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 样例 给出二叉树如下所示,并给出num=22。 5 / \ 4 6 / / \ 12 13 6 / \ / \ 9 1 5 ...

WangXu__的博客 137

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

二叉树中和为某一值的路径 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 思路 上面的图具体的分析了这个示例。当用前序遍历的方式访问到某一结点时,我们把该结点添加到路径上,并累加该结点的值。如果该结点为叶结点并且路径中结点值的和刚好等于输入...

qq_40608516的博客 165

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

二叉树中和为某一值的路径 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 解题思路: 当用前序遍历的方式访问某一节点的时候,我们该把节点添加到路径上,并累加该节点的值。 如...

火山君的博客 135

求二叉树中和为特定值的路径

求一棵二叉树中和为特定值的路径,可以用深搜的思路来解决,由于二叉树中各个节点的值没有特定的大小规律,所以没有可行的剪枝策略。具体的代码如下所示:

muguangzhilian的专栏 757

c语言二叉树找元素位置,C语言实现找出二叉树中某个值的所有路径的方法

本文实例讲述了C语言实现找出二叉树中某个值的所有路径的方法,是非常常用的一个实用算法技巧。分享给大家供大家参考。具体实现方法如下:#include #include #include #include using namespace std;vector result;struct Node {Node(int i = 0, Node *pl = NULL, Node *pr = NULL) : ...

weixin_30586369的博客 246

牛客题解 | 二叉树中和为某一值的路径(二)

牛客题库题解

wc529065的博客 659

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

题目 二叉树中和为某一值的路径 描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 思路 本问题是典型的二叉树方案搜索问题,使用回溯法解决,其包含 先序遍历 + 路径记录 两部分 先序遍历: 按照 “根、左、右” 的顺序,遍历树的所有节点。 路径记录: 在先序遍历中,记录从根节点到当前节点的路径。当路径为 ① 根节点到叶节点形成的路径 且 ② 各节点值的和等于目标值 sum时,将此路径加入结果列表。 算法流程:

Kaite_han的博客 285

[算法练习及思路-leetcode剑指offer(Java解法)]No34.二叉树中和为某一值的路径

题号:剑指 Offer 34 题目名:二叉树中和为某一值的路径 原题URL:https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/ 题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。 示例 示例 1: 给定如下二叉树,以及目标和 sum = 22, 5

叶落雨飘的博客 187

牛客网在线编程专题《剑指offer-面试题25》二叉树中和为某一值的路径

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎专栏:https://zhuanlan.zhihu.com/Microstrong Github:https://githu...

Microstrong 470

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

解题思路: 首先需要理解路径的概念:路径总是从根节点到叶节点,由于路径是从根节点开始,所以可以考虑用先序遍历的方式。每遍历完一个节点进入节点的左子树时,需要将当前节点保存起来,作为路径中的一个节点,之所以需要保存路径上的节点,是因为需要计算路径的和,是否和待查找元素相同。因此考虑用栈来保存路径。注意:当从子节点返回父节点时,需要将当前元素出栈。用于更新路径。 import java.util.

Logan的博客 459
上一篇: 单链表有环求长度及相交问题
下一篇: 数独求解
notishell
博客等级 码龄15年 0粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值