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

Mac电脑本地安装Stable Diffusion小白教程避开所有坑教程 如果出现黄字部分警告,如WARNING: The scripts pip, pip3 and pip3.9 are installed inz‘/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/bin’ which is not on PATH)需要将其添加到path。下载pip,输入:curl https://bootstrap.pypa.io/pip/get-pip.py -o get-pip.py。 阅读详情

题目:在二元树中找出和为某一值的所有路径

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

思路

1、当访问到某一节点时,把该结点的值添加到当前和变量,且把该结点压入栈中。

2、若结点为叶子结点,且当前CurrentSum与期望的expectedSum相等,则打印栈中的结点值,即为所需的路径。

3、若结点不是叶子结点,继续访问它的左孩子结点,访问它的右孩子结点。

4、删除该结点。包括从当前和变量中减去结点值,从栈中弹出结点值。此时,已回到父结点。

程序中的栈,利用STL中的vector,这样简化了编码工作。

具体的findPath函数代码如下:

void findPath(BtreeNode *root, int excepetedSum, vector<int> path, int currentSum) {
	currentSum += root->v;
	path.push_back(root->v);
	if (root->left == NULL && root->right == NULL && currentSum == excepetedSum) {
		vector<int>::iterator iter;
		for (iter = path.begin(); iter != path.end(); iter++)
			cout << *iter << " ";
	}else {
		if (root->left != NULL)
			findPath(root->left, excepetedSum, path, currentSum);
		if (root->right != NULL)
			findPath(root->right, excepetedSum, path, currentSum);
	}
	currentSum -= root->v;
	path.pop_back();
}

上全部已测试通过的代码:

// printTreePathSum.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

struct BtreeNode {
	int v;
	struct BtreeNode *left;
	struct BtreeNode *right;
};

BtreeNode* insertNode(BtreeNode* root, int value) {
    BtreeNode* ptr=root;
    BtreeNode* tmpNode;
    BtreeNode* newNode = (BtreeNode*)malloc(sizeof(struct BtreeNode));
    newNode->v = value;
    newNode->left = NULL;
    newNode->right = NULL;
    
    if (ptr == NULL)
        return newNode;
    while (ptr != NULL) {
        tmpNode = ptr;
        if (ptr->v < value)
            ptr = ptr->right;
        else
            ptr = ptr->left;
    }
    if (tmpNode->v < value)
        tmpNode->right = newNode;
    else
        tmpNode->left = newNode;
    return root;
}

BtreeNode* buildTree() {
	BtreeNode* root = NULL;
	int a;
	while (cin>>a) {
		root = insertNode(root, a);
	}
	return root;
}
void findPath(BtreeNode *root, int excepetedSum, vector<int> path, int currentSum) {
	currentSum += root->v;
	path.push_back(root->v);
	if (root->left == NULL && root->right == NULL && currentSum == excepetedSum) {
		vector<int>::iterator iter;
		for (iter = path.begin(); iter != path.end(); iter++)
			cout << *iter << " ";
	}else {
		if (root->left != NULL)
			findPath(root->left, excepetedSum, path, currentSum);
		if (root->right != NULL)
			findPath(root->right, excepetedSum, path, currentSum);
	}
	currentSum -= root->v;
	path.pop_back();
}

int _tmain(int argc, _TCHAR* argv[])
{
	BtreeNode* root;
	root = buildTree();
	vector<int> path;
	findPath(root, 22, path, 0);
	system("pause");
	return 0;
}


R语言生存分析之限制性立方样条分析:样条回归、和多项式回归有什么不同?是否存在非线性关系、限制性立方样条cox回归模型 阅读详情

相关推荐

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 579

二叉树中和为某一值的路径(C++)

题目: 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 思路: 使用递归方法,从根节点出发,逐步向子节点遍历,使用动态数组保存所经过的节点,并保存每一步时当前的路径节点之和,当到达叶节点时,该路径上所有节点之和如果等于目标值,则保存该路径,并返回父节点,去判断其他路径 代码如下: /*...

Jerry_Leo_liu的博客 615

NIST随机性测试实战:从理论公式到结果解读

本文详细解析了NIST随机性测试的实战应用,从基础测试到高级测试,涵盖频数测试、块频数测试、游程测试等核心方法。通过实际案例和参数设置经验,帮助读者理解如何解读测试结果并排查常见问题,提升随机数生成质量。文章还分享了自动化测试流程和硬件RNG特殊处理技巧,适合密码学和区块链开发者参考。

weixin_29323365的博客 314

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

题目来源:http://bbs.youkuaiyun.com/topics/350118968 4.在二元树中找出和为某一值的所有路径 题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树   10      / \      5 12      / \      4 7

YoungForYou的专栏 571

Docker Desktop 在 Windows 上的安装和使用

WSL 指 “”,这是一个在 Windows 10\11 上能够运行原生 Linux 二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发的,旨在使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。这极大地拓展了Windows系统的功能,使用户能够在Windows环境中享受到Linux的强大功能。//Linux容器。

swadian2008的博客 6万+

SpringBoot+Vue+kkFileView实现文档管理(文档上传、下载、在线预览)

上面在使用OpenOffice实现doc、excel、ppt等文档的管理和预览。除此之外可用kkFileView实现包括且更多文档的预览。

BADAO_LIUMANG_QIZHI的博客 1万+

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

题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如 输入整数22和如下二元树   10    / /    5 12    /  /   4     7 则打印出两条路径:10, 12和10, 5, 7。 二元树节点的数据结构定义为: struct BinaryTreeNode

yake25的专栏 2058

LoveSQL

LoveSQL(SQL注入详解) 1、根据题目,显然想到的是sql注入漏洞,直接尝试万能密码 2、此时url构造,查看字段数 /check.php?username=admin' order by 3%23&password=1 # 存在 /check.php?username=admin' order by 4%23&password=1 # 报错 因此,得到总共有三个字段数 注意:url中不能用#,应该用url编码%23 3、用union来查询测试注入点,查看回显点

lunan的博客 1562

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

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

cxh342968816的专栏 515

数字逻辑Fundamentals of Digital Logic with Verilog Design | 3rd Edition Solutins Chapter 3(step by step)

第三章3-1~3-27全部习题解析和代码模块

weixin_62651190的博客 1946

BAT007:批量为当前目录下的文件夹添加前缀或后缀

摘要:编写批处理程序,实现批量为当前目录下的文件夹添加前缀或后缀。

qq_31762031的博客 4052

【面试题】在二元树中找出和为某一值的所有路径——Java实现

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

在梅边的专栏 2168

化工设计软件:AVEVA E3D二次开发_(8).管道系统设计

在 AVEVA E3D Design 中,管道规格的定义是确保设计一致性和标准化的关键。通过二次开发,可以自动生成并管理管道规格。下面是一个示例,展示如何通过编写脚本来定义和管理管道规格。# 导入必要的库 import clr。

kkchenjj的博客 972
上一篇: 设计包含min函数的栈
下一篇: 链表相交(及相交的节点)、判断链表是否有环问题
drunkcello
博客等级 码龄14年 12粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值