【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
题目链接地址:
http://ac.jobdu.com/problem.php?
pid=1368
题目1368:二叉树中和为某一值的路径
时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252解决:562
题目描写叙述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的全部路径。
路径定义为从树的根结点開始往下一直到叶结点所经过的结点形成一条路径。
输入:
每一个測试案例包含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:
思路分析:
DFS遍历,vector存储路径,sum记录路径和。採用回溯的方法进行节点的输出。
时间复杂度O(n)。
遍历过程中须要存储路径。vector的空间复杂度为O(log(n))。
代码:
/*********************************
【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
Author:牧之丶 Date:2015年
Email:bzhou84@163.com
**********************************/
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <math.h>
#include <stack>
#include <vector>
#include<queue>
using namespace std;
struct Node
{
int value;
int lchild;
int rchild;
}nodes[10005];
vector<int> result;
void dfs(int count,int sum,int i)
{
if(i==-1)
return ;
if(sum==count+nodes[i].value&&nodes[i].lchild==-1&&nodes[i].rchild==-1)
{
result.push_back(i);
printf("A path is found:");
for(int j=0;j<result.size();j++)
printf(" %d",result[j]);
printf("\n");
result.pop_back();
return;
}
if(sum>count+nodes[i].value)
{
result.push_back(i);
dfs(count+nodes[i].value,sum,nodes[i].lchild);
dfs(count+nodes[i].value,sum,nodes[i].rchild);
result.pop_back();
}
}
int main()
{
int num,sum;
//freopen("data.in","r",stdin);
while(scanf("%d%d",&num,&sum)!=EOF)
{
result.clear();
for(int i=1;i<=num;i++)
{
scanf("%d%d%d",&nodes[i].value,&nodes[i].lchild,&nodes[i].rchild);
if(nodes[i].lchild>nodes[i].rchild)
{
int tmp=nodes[i].lchild;
nodes[i].lchild=nodes[i].rchild;
nodes[i].rchild=tmp;
}
}
printf("result:\n");
dfs(0,sum,1);
}
return 0;
}
/**************************************************************
Problem: 1368
Language: C++
Result: Accepted
Time:30 ms
Memory:1140 kb
****************************************************************/
【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径的更多相关文章
- 《剑指offer》— JavaScript(24)二叉树中和为某一值的路径
二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 前序遍历二叉树, ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历
二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...
- C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
剑指offer 重建二叉树 提交网址: http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tq ...
- 剑指offer——面试题7:重建二叉树
// 面试题7:重建二叉树 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1, // 2, ...
- 剑指Offer面试题:5.重建二叉树
一.题目:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序 ...
- 剑指offer 面试题6:重建二叉树
重建二叉树 题目 输入某二叉树的前序遍历和中序遍历,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含有重复的数字. 例如,前序遍历序列:{1,2,3,7,3,5,6,8},中序遍历序列:{ ...
- 剑指offer面试题6:重建二叉树
1.题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. public class Solution { public TreeNode reConstructBinaryTree(int ...
- 剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构
#include"iostream" #include"stdio.h" #include"math.h" using namespace ...
- 剑指offer 面试题7:重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
随机推荐
- 【转】 [Unity3D]手机3D游戏开发:场景切换与数据存储(PlayerPrefs 类的介绍与使用)
http://blog.csdn.net/pleasecallmewhy/article/details/8543181 在Unity中的数据存储和iOS中字典的存储基本相同,是通过关键字实现数据存储 ...
- 使用SS5搭建linux下的sock5代理服务器
http://sourceforge.net/projects/ss5/下载最新源码 apt-get install libpam0g-dev apt-get install libldap2-dev ...
- BZOJ1562 [NOI2009]变换序列 【KM算法】
题目 输入格式 输出格式 输入样例 5 1 1 2 2 1 输出样例 1 2 4 0 3 提示 30%的数据中N≤50: 60%的数据中N≤500: 100%的数据中N≤10000. 题解 每个位置可 ...
- javascript作用域链理解
执行上下文(Execution context,简称EC) 概念 每当控制器到达ECMAScript可执行代码的时候,就进入了一个执行上下文. javascript中,EC分为三种: ...
- CDOJ 1256 二维前缀和处理
昊昊喜欢运动 他NN 天内会参加MM 种运动(每种运动用一个[1,m][1,m] 的整数表示) 舍友有QQ 个问题 问昊昊第ll 天到第rr 天参加了多少种不同的运动 Input 输入两个数NN , ...
- 替换/重制Homebrew源
homebrew主要分两部分:git repo(位于GitHub)和二进制bottles(位于bintray),这两者在国内访问都不太顺畅.可以替换成国内的镜像,git repo国内镜像就比较多了,可 ...
- 分布式文件系统之Glusterfs
1.环境规划如下 centos7.4 三个节点一块 sdb 3G大小的测试硬盘 2.Glusterfs 卷的类型比较多,这里我们测试最常用的一种 Distributed Replicate ...
- 讲的很详细的一篇关于object equals() & hashCode() 的文章
转: 讲的很详细的一篇关于object equals() & hashCode() 的文章 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java ...
- HDOJ 1171 Big Event in HDU
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Javascript&Html-history对象
Javascript&Html-history对象 history对象保存着用户的上网记录,这些记录从用户打开浏览器开始. 用户借助history对象实现的跳转. history.go(-1) ...