【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

分类:剑指OFFER

题目链接地址: ?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 **********************************/ ; 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: 1368Language: C++Result: AcceptedTime:30 msMemory:1140 kb****************************************************************/

版权声明:本文为博主原创文章,未经博主允许不得转载。

上一篇【剑指Offer面试题】 九度OJ1367:二叉搜索树的后序遍历序列下一篇【剑指Offer面试题】 九度OJ1524:复杂链表的复制

顶1踩0

当一个人真正觉悟的一刻,他放弃追寻外在世界的财富,

【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

相关文章:

你感兴趣的文章:

标签云: