博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
阅读量:6587 次
发布时间:2019-06-24

本文共 1978 字,大约阅读时间需要 6 分钟。

题目链接地址:

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 
#include
#include
#include
#include
#include
#include
using namespace std; struct Node{ int value; int lchild; int rchild;}nodes[10005];vector
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
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****************************************************************/

转载地址:http://fjhno.baihongyu.com/

你可能感兴趣的文章
JSR 303 - Bean Validation 介绍及最佳实践
查看>>
EVERTEC是如何利用大型机帮客户省钱?
查看>>
如何使用CHM 绕过Device guard
查看>>
vue中的组件
查看>>
Druid、C3P0、Tomcat Pool的性能测试与选型
查看>>
如何用PHP实现Socket服务器
查看>>
国产杀毒软件连续因“作弊”遭全球权威评测机构指责
查看>>
人工智能将为维护网络安全带来更多可能
查看>>
低频段用于4G,电信联通仍难改劣势
查看>>
移动大数据时代:无线网络的挑战与机遇
查看>>
我是如何用CSS绘制各种形状的
查看>>
超融合基础架构需要完全更换现有网络吗?
查看>>
Apache Kylin中对上亿字符串的精确Count_Distinct示例
查看>>
怎么使用Diff和Meld工具发现两个目录间的不同之处
查看>>
2016,不能忽视的IBM闪存新思维下的新战略
查看>>
那些在错误道路上一路狂奔的国产VR
查看>>
蓝牙要抢ZigBee的地盘?低功耗广域网络笑了
查看>>
报告:2015年数据中心SDN市场将增长70%
查看>>
7个华丽的基于Canvas的HTML5动画
查看>>
如何基于数据快速构建用户模型(Persona)?
查看>>