题目1368:二叉树中和为某一值的路径
来源:互联网 发布:手机怎么进去淘宝秒杀 编辑:程序博客网 时间:2024/05/29 17:12
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
时间限制:1 秒
内存限制:32 兆
题目描述:
- 输入:
每个测试案例包括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 2 5
A path is found: 1 3
result:
分析:注意题目是按字典顺序输出,如没注意这点,将会有一个案例无法通过。
#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct BNode{int val, left, right;};const int N = 10001;BNode node[N];vector<vector<int> >ans;vector<int> vec;void getPath(int root, int sum, int k){if (node[root].left == -1 && node[root].right == -1){vec.push_back(root);if (sum + node[root].val == k)ans.push_back(vec);vec.pop_back();return;}vec.push_back(root);if (node[root].left != -1) getPath(node[root].left, sum + node[root].val, k);if (node[root].right != -1) getPath(node[root].right, sum + node[root].val, k);vec.pop_back();}int main(void){int n, k;while (scanf("%d", &n) != EOF){scanf("%d", &k);for (int i = 1; i <= n; ++i){scanf("%d%d%d", &node[i].val, &node[i].left, &node[i].right);}ans.clear();vec.clear();getPath(1, 0, k);sort(ans.begin(), ans.end());printf("result:\n");for (int i = 0; i < ans.size(); ++i){printf("A path is found:");for (int j = 0; j < ans[i].size(); ++j)printf(" %d", ans[i][j]);printf("\n");}}return 0;}
0 0
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径
- 题目11:二叉树中和为某一值的路径
- 算法题目---二叉树中和为某一值的路径
- 题目1368:二叉树中和为某一值的路径-九度
- 九度 题目1368:二叉树中和为某一值的路径
- 九度 题目1368:二叉树中和为某一值的路径
- 九度OJ-题目1368:二叉树中和为某一值的路径
- 剑指Offer题目1368:二叉树中和为某一值的路径
- 1368:二叉树中和为某一值的路径 @jobdu
- JD 1368:二叉树中和为某一值的路径
- 【剑指Offer面试编程题】题目1368:二叉树中和为某一值的路径--九度OJ
- 【树】二叉树中和为某一值的路径
- 【树6】二叉树中和为某一值的路径
- 二叉树中和为某一值的路径
- hdu3501 Calculation 2 欧拉函数
- poj1006
- 郁闷的 linux error: 13: Permission denied 引发Linux中的文件权限详解
- iOS - 中三种定时器的用法NSTimer、CADisplayLink、GCD
- 算法入门2(c语言)
- 题目1368:二叉树中和为某一值的路径
- 微信公众平台开发入门教程
- hdu1829 A Bug's Life
- 不要在init和dealloc函数中使用accessor(访问器)
- linux fping命令使用
- Oracle PLSQL 学习笔记摘要
- HDU 2050 折线分割平面
- uva 129
- SQL Inner Join