题目描述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
输入:
每个测试案例包括n+1行:
第一行为2个整数n,k(1<=n<=10000),n表示结点的个数,k表示要求的路径和,结点编号从1到n。
接下来有n行。这n行中每行为3个整数vi,leftnode,rightnode,vi表示第i个结点的值,leftnode表示第i个结点的左孩子结点编号,rightnode表示第i个结点的右孩子结点编号,若无结点值为-1。编号为1的结点为根结点。
输出:
对应每个测试案例,先输出“result:”占一行,接下来按字典顺序输出满足条件的所有路径,这些路径由结点编号组成,输出格式参照输出样例。
样例输入:
5 22
10 2 3
5 4 5
12 -1 -1
4 -1 -1
7 -1 -1
1 5
1 -1 -1
样例输出:
result:
A path is found: 1 25
A path is found: 1 3
result:
#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
int top=-1;
int path[MAX];//用数组模拟辅助栈
//pop 使得top--
bool pop()
{
if(top<0)
return false;
top--;
return true;
}
void findPath(BinaryTreeNode* pRoot,int expectSum,int currentSum)
{
if(pRoot==NULL)
return;
currentSum+=pRoot->m_nValue;
path[++top]=pRoot->m_nValue;
bool isLeaf =pRoot->m_pLeft==NULL&&pRoot->m_pRight==NULL;
if(currentSum==expectSum&&isLeaf)
{
printf("A path is found:");
for(int i=0;i<=top;i++)
printf("%d\t",path[i]);
printf("\n");
}
if(pRoot->m_pLeft!=NULL)
findPath(pRoot->m_pLeft,expectSum,currentSum);
if(pRoot->m_pRight!=NULL)
findPath(pRoot->m_pRight,expectSum,currentSum);
currentSum-=pRoot->m_nValue;
pop();
}
BinaryTreeNode* createTree(BinaryTreeNode* pRoot)
{
int data;
scanf("%d",&data);
if(data!=-1)
{
pRoot=(BinaryTreeNode*)malloc(sizeof(BinaryTreeNode));
if(pRoot==NULL)
exit(0);
pRoot->m_nValue=data;
//递归左子树和右子树
pRoot->m_pLeft=createTree(pRoot->m_pLeft);
pRoot->m_pRight=createTree(pRoot->m_pRight);
return pRoot;
}
return NULL;
}
int main()
{
BinaryTreeNode* pTree;
BinaryTreeNode* pRoot = createTree(pTree);
int expectSum;
int currentSum=0;
scanf("%d",&expectSum);
findPath(pRoot,expectSum,currentSum);
return 0;
}
结果:
分享到:
相关推荐
二叉树中和为某一值的路径.md
java基础面试题二叉树中和为某一值的路径本资源系百度网盘分享地址
python python_剑指offer第24题二叉树中和为某一值的路径
34. 二叉树中和为某一值的路径题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。下图的二叉树有两条和为 22 的路径:10, 5
Leetcode 面试题 34 二叉树中和为某一值的路径题目描述输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直
c++ c++_二叉树中和为某一个值的路径
在给定的问题中,我们面临着一个经典的二叉树问题,即寻找二叉树中和为目标值的路径。这个问题可以通过深度优先搜索(DFS)策略来解决。以下是对这个问题的详细解析: 首先,我们要定义一个二叉树节点的数据结构,...
在给定的问题中,我们面临着一个典型的二叉树遍历问题,目标是找出所有路径,使得路径上的节点值之和等于给定的目标值。这个问题可以用深度优先搜索(DFS)或广度优先搜索(BFS)来解决,这里采用的是DFS。 首先,...
题目输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径示例
在给定的问题中,我们需要实现一个功能来查找二叉树中所有节点值之和等于给定整数值的路径。这涉及到二叉树的遍历,特别是广度优先搜索(BFS)。下面将详细解释这个问题的解决方案及其涉及的二叉树概念。 首先,...
输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。输出:[[5,4,12,1],[5,6,6,5]]private List> res =
二叉树中和为某一值的路径: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,...
剑指Offer(Python多种思路实现):二叉树中和为某一值的路径 面试34题: 题目:二叉树中和为某一值的路径 题:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始...
# Python实现《剑指offer》 部分代码自己添加了一些测试用例, 或者自己添加了一些功能 1. 初级程序员注重算法和数据结构 2. 事先做好准备,对工作有热情 3. 面试过程放松。不要急于写代码,了解清楚所要解决的问题,...
示例:给定如下二叉树,以及目标和 sum = 22,返回:思路套用回溯算法的思路设定一个结果数组result来存储所有符合条件的路径设定一个栈stack来存储当
在Python编程中,解决二叉树中和为某一值的路径问题是一个常见的数据结构与算法题目。这个问题的目标是找到二叉树中所有从根节点到叶节点的路径,且这些路径上的节点值之和等于给定的目标整数。这里我们通过一个具体...
本文所探讨的是在二叉树中找到一条路径,使得从根节点到叶子节点的路径上所有节点的值之和等于给定的值。 2. Python实现细节: - 问题转化为了回溯算法的应用问题。回溯算法是一种通过探索所有可能的候选解来找出...
以上两种方法都是通过BFS遍历二叉树,实现从上到下、从左到右的层次遍历,区别在于输出格式的不同,一个是单行输出节点值,另一个是分层输出节点值。在实际编程面试中,这类问题常用来考察应聘者对数据结构和算法的...