题目链接地址:

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:二叉树中和为某一值的路径的更多相关文章

  1. 《剑指offer》— JavaScript(24)二叉树中和为某一值的路径

    二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 思路 前序遍历二叉树, ...

  2. 剑指Offer - 九度1368 - 二叉树中和为某一值的路径

    剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...

  3. 剑指offer面试题:输入某二叉树的前序遍历和中序遍历,输出后序遍历

    二叉树的先序,中序,后序如何遍历,不在此多说了.直接看题目描述吧(题目摘自九度oj剑指offer面试题6): 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结 ...

  4. C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告

    剑指offer 重建二叉树 提交网址: http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&tq ...

  5. 剑指offer——面试题7:重建二叉树

    // 面试题7:重建二叉树 // 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输 // 入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1, // 2, ...

  6. 剑指Offer面试题:5.重建二叉树

    一.题目:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序 ...

  7. 剑指offer 面试题6:重建二叉树

    重建二叉树 题目 输入某二叉树的前序遍历和中序遍历,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含有重复的数字. 例如,前序遍历序列:{1,2,3,7,3,5,6,8},中序遍历序列:{ ...

  8. 剑指offer面试题6:重建二叉树

    1.题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树. public class Solution { public TreeNode reConstructBinaryTree(int ...

  9. 剑指offer——面试题26:判断二叉树B是否为二叉树A的子结构

    #include"iostream" #include"stdio.h" #include"math.h" using namespace ...

  10. 剑指offer 面试题7:重建二叉树

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...

随机推荐

  1. struts ValueStack 详解

    一.ValueStack     1.ValueStack是一个接口,在struts2中使用OGNL(Object-Graph Navigation Language)表达式实际上是使用        ...

  2. struts OGNL详解

    首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的 ...

  3. 欧拉路&&欧拉回路 概念及其练习

    欧拉路: 如果给定无孤立结点图G,若存在一条路,经过图中每边一次且仅一次,这条路称为欧拉路: 如果给定无孤立结点图G,若存在一条回路,经过图中每边一次且仅一次,那么该回路称为欧拉回路. 存在欧拉回路的 ...

  4. 【转】BehaviorDesigner学习

    BehaviorDesigner学习   行为树: 行为树设计师插件是一个专门为unity设计的AI插件. 通过继承Behavior中的Task下的四个节点,可以创建自己的行为树节点. 行为树中的自定 ...

  5. phpstrom换行的一个小坑

    安装phpstrom后汉化会默认不是左边定格换行,而是会智能换行 苦找了许久了,终于知道在哪设置了,跟大家分享一下,希望不要走同样的坑 不勾选即可

  6. CLion 使用笔记(三)

    我已经在博客里面发布了好几篇 CLion 使用笔记了,没追究这是第几篇,姑且算作第三篇. 我的 CLion 是搭配了 MSYS2 和 Conan 使用的.MSYS2 提供 C++ toolchain. ...

  7. BZOJ5306 [HAOI2018]染色 【组合数 + 容斥 + NTT】

    题目 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 \(M\) 种颜色中的某一种. 然而小 C 只 ...

  8. codechef May Challenge 2016 FORESTGA: Forest Gathering 二分

    Description All submissions for this problem are available. Read problems statements in Mandarin Chi ...

  9. git常用命令符

    全局配置 $ git config --global user.name "姓名" 告诉git你是谁 $ git config --global user.email " ...

  10. 快速排序Quick sort(转)

    原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 ...