题目描述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
九度OJ地址:http://ac.jobdu.com/problem.php?pid=1368 自己写的代码,自己运行没问题,提交总是不通过 = =
 #include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<memory.h>
using namespace std; #define MAX 100
struct BinaryTreeNode{
int index;
int value;
int lchild;
int rchild;
}; BinaryTreeNode p[MAX];
vector<BinaryTreeNode> path; void FindPath(BinaryTreeNode* p,int exceptedNum,vector<BinaryTreeNode> path,int currentNum){
currentNum=currentNum+(p->value);
path.push_back(*p);
bool IsLeaf=(p->lchild==-)&&(p->rchild==-); if(currentNum==exceptedNum&&IsLeaf)
{
printf("A path is found: ");
vector<BinaryTreeNode>::iterator iter=path.begin();
for(;iter!=path.end();++iter)
{
printf("%d ",iter->index);
}
printf("\n");
}
if(p->lchild!=-)
FindPath(p+(p->lchild-p->index),exceptedNum,path,currentNum);
if(p->rchild!=-)
FindPath(p+(p->rchild-p->index),exceptedNum,path,currentNum);
currentNum=currentNum-(p->value);
path.pop_back(); }
void FindPath(BinaryTreeNode* p,int exceptedNum){
if(p==NULL)
return;
int currentNum=;
FindPath(p,exceptedNum,path,currentNum); }
int main()
{
int n,k;
int v,l,r;
while(scanf("%d %d",&n,&k)==)
{
memset(p,-,sizeof(p));
for(int i=;i<n;i++)
{
scanf("%d %d %d",&v,&l,&r);
p[i].index=i+;
p[i].value=v;
p[i].lchild=min(l,r);
p[i].rchild=max(l,r);
}
printf("result:\n");
FindPath(p,k); }
return ;
}

找了大神代码完美运行:

#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#include<vector>
#include<memory.h>
using namespace std; #define MAX 100
struct BinaryTreeNode{
int index;
int value;
int lchild;
int rchild;
}; BinaryTreeNode p[MAX];
vector<BinaryTreeNode> path; void FindPath(BinaryTreeNode* p,int exceptedNum,vector<BinaryTreeNode> path,int currentNum){
currentNum=currentNum+(p->value);
path.push_back(*p);
bool IsLeaf=(p->lchild==-)&&(p->rchild==-); if(currentNum==exceptedNum&&IsLeaf)
{
printf("A path is found: ");
vector<BinaryTreeNode>::iterator iter=path.begin();
for(;iter!=path.end();++iter)
{
printf("%d ",iter->index);
}
printf("\n");
}
if(p->lchild!=-)
FindPath(p+(p->lchild-p->index),exceptedNum,path,currentNum);
if(p->rchild!=-)
FindPath(p+(p->rchild-p->index),exceptedNum,path,currentNum);
currentNum=currentNum-(p->value);
path.pop_back(); }
void FindPath(BinaryTreeNode* p,int exceptedNum){
if(p==NULL)
return;
int currentNum=;
FindPath(p,exceptedNum,path,currentNum); }
int main()
{
int n,k;
int v,l,r;
while(scanf("%d %d",&n,&k)==)
{
memset(p,-,sizeof(p));
for(int i=;i<n;i++)
{
scanf("%d %d %d",&v,&l,&r);
p[i].index=i+;
p[i].value=v;
p[i].lchild=min(l,r);
p[i].rchild=max(l,r);
}
printf("result:\n");
FindPath(p,k); }
return ;
}

慢慢学习吧

剑指Offer:面试题25的更多相关文章

  1. 剑指offer——面试题25:合并两个 排序的链表

    自己答案: ListNode* MergeTwoSortedList(ListNode* pHead1,ListNode* pHead2) { if(pHead1==nullptr&& ...

  2. 剑指Offer:面试题25——二叉树中和为某一值的路径(java实现)

    问题描述: 输入一棵二叉树和一个整数,打印出二叉树中结点指的和为输入整数的所有路径.从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.二叉树结点的定义如下: public class Tree ...

  3. 剑指offer面试题25:二叉树中和为某一值的路径

    题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.从根节点开始往下一直到叶节点所经过的节点形成一条路径. 解题思路:当使用前序遍历的方式访问某一节点时,把该节点添加到路径上 ...

  4. 剑指Offer:面试题15——链表中倒数第k个结点(java实现)

    问题描述 输入一个链表,输出该链表中倒数第k个结点.(尾结点是倒数第一个) 结点定义如下: public class ListNode { int val; ListNode next = null; ...

  5. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

  6. 剑指Offer——笔试题+知识点总结

    剑指Offer--笔试题+知识点总结 情景回顾 时间:2016.9.23 12:00-14:00 19:00-21:00 地点:山东省网络环境智能计算技术重点实验室 事件:笔试 注意事项:要有大局观, ...

  7. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  8. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  9. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  10. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

随机推荐

  1. C++ 前置声明 和 包含头文件 如何选择

    假设有一个Date类 Date.h class Date { private: int year, month, day; }; 如果有个Task类的定义要用到Date类,有两种写法 其一 Task1 ...

  2. SQL Server 连接和事务相关的问题。

    方法 1. dbcc opentran + sys.dm_exec_connections dbcc opentran; dbcc opentran 针对当前数据库 dbcc opentran('St ...

  3. JavaScript学习笔记:数组reduce()和reduceRight()方法

    很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...

  4. 一步一步学python(三) - 使用字符串

    1.基本字符串操作 序列和元组的索引.分片.乘法.判断成员资格.求长度.取最小值和最大值对字符串同样适用. 字符串是不可变的 2.字符串格式化 %左侧放字符串右侧放格式化的值.一般情况下使用元组 fo ...

  5. TCP的那些事(转载)

    (转载本站文章请注明作者和出处 酷 壳 – CoolShell.cn ,请勿用于任何商业用途) TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身 ...

  6. linux之SQL语句简明教程

    本教程参考http://www.1keydata.com/cn/sql/ 目的是让初学者了解linux下Mysql的操作,但是我仍想侧重于SQL语句的讲解 sql语句的学习将按照下图的流程: 当然在这 ...

  7. 【HDU 4786 Fibonacci Tree】最小生成树

    一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...

  8. exit()与_exit()的区别

    从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构:exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干道工序.exit( ...

  9. DisplayMetircs 类

    Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的一项重要信息,很好的是,Android ...

  10. RDLC报表系列(六) 多图表-折线图和柱状图

    美好的一天开始了,这篇是RDLC系列的最后一篇文章,我的小项目也已经release,正在测试中. 1.新建demo3.aspx和demo3.rdlc文件 2.往rdlc文件中拖一个图标控件,在弹出的窗 ...