题目:

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

思路:

dfs一下就可以了。一般dfs肯定递归写比较方便。

注意,递归的结束条件是遇到叶节点,而不是遇到空指针。(如果是遇到空指针,则叶节点相当于判断了两次,然而写出来的代码出现了段错误,不知道为什么)

相关:树求和(里面好像dfs用循环写的~)

代码:

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int> > res;
if(root==NULL) return res; vector<TreeNode*> vec;
vec.push_back(root);
dfs(root,,expectNumber,vec,res); return res;
}
private:
void dfs(TreeNode* root,int sum,int expectNumber,vector<TreeNode*> &vec,vector<vector<int> > &res)
{
if(root->left==NULL && root->right==NULL)//递归结束条件应该是叶节点;而不是root==NULL
{
if((sum+root->val)==expectNumber)
{
vector<int> intvec;
for(int i=;i<vec.size();++i)
intvec.push_back(vec[i]->val);
res.push_back(intvec);//vector的该成员函数是以复制的方式加入
}
}
else
{
if(root->left)
{
vec.push_back(root->left);
dfs(root->left,sum+root->val,expectNumber,vec,res);//因为直接以sum+root->val参数传入的,所以后面不用恢复sum
vec.pop_back();
} if(root->right)
{
vec.push_back(root->right);
dfs(root->right,sum+root->val,expectNumber,vec,res);
vec.pop_back();
}
}
}
};

递归结束条件是空指针时的代码(有段错误)

提交时间:-- :: 语言:C++ 状态:段错误
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int> > res;
if(root==NULL) return res; vector<TreeNode*> vec;
vec.push_back(root);
dfs(root,,expectNumber,vec,res); return res;
}
private:
void dfs(TreeNode* root,int sum,int expectNumber,vector<TreeNode*> vec,vector<vector<int> > &res)
{
if(root==NULL)
{
if(sum==expectNumber)
{
vector<int> intvec;
for(int i=;i<vec.size();++i)
intvec.push_back(vec[i]->val);
res.push_back(intvec);//vector的该成员函数是以复制的方式加入
}
}
else
{
vec.push_back(root->left);
dfs(root->left,sum+root->val,expectNumber,vec,res);//因为直接以sum+root->val参数传入的,所以后面不用恢复sum
vec.pop_back(); vec.push_back(root->right);
dfs(root->right,sum+root->val,expectNumber,vec,res);
vec.pop_back();
}
}
};

【剑指offer】面试题25:二叉树中和为某一值的路径的更多相关文章

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

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

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

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

  3. 剑指offer(24)二叉树中和为某一值的路径

    题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径 题目分析 这题基本上一看就知道应该深度遍历整个树, ...

  4. 【剑指Offer】 24、二叉树中和为某一值的路径

      题目描述:   输入一颗二叉树的根结点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中, ...

  5. 【剑指Offer】24、二叉树中和为某一值的路径

    题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  6. 【剑指offer】Q25:二叉树中和为某一值的路径

    说明:最烦的就是看别人的博客,题解里直接上代码,一行分析都没有.只是这个题... class BTNode(): def __init__(self, val = -1): self.val = va ...

  7. 《剑指offer》面试题25 二叉树中和为某一值的路径 Java版

    (判断是否有从根到叶子节点的路径,其和为给定值.记录这些路径.) 我的方法:这道题我是按照回溯的思路去做的,我们需要一个数据结构来保存和删除当前递归函数中添加的值.这里要打印一条路径,我们可以选择Li ...

  8. 【Offer】[34] 【二叉树中和为某一值的路径】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径.从树的根节点开始往下一直到叶节点所经过的节点形成一条路径.  ...

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

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

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

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

随机推荐

  1. linux下C和shell调用的popen函数

    说明:      本文介绍popen函数的使用方法和行为机理,并给出实际的例子来辅助说明了popen函数的使用方法. popen函数使用FIFO管道执行外部程序,首先让我们看看popen的函数原型吧: ...

  2. 利用btrace工具监控在线运行java程序

     一.作用 可以用于对运行中java程序进行诊断监控分析,也可以用于开发阶段查看一些异常信息或者调用过程(如有些第三方代码没有源代码,不便于debug调试). 注:如果用于对在线运行系统的诊断,需 ...

  3. linux中UUID和LABLE

     一.UUID 第一次看到UUID这个东西,是在Ubuntu系统中看到/boot/grub/grub.cfg中对kernel的配置:linux   /boot/vmlinuz-2.6.31-14-ge ...

  4. 第02讲- Android开发环境

    第02讲Android开发环境 需要下载的软件: JDK(JavaDevelopment Kit) Eclipse AndroidSDK(SoftwareDevelopmentKit) ADT(And ...

  5. SQL生成随机字符串

    1.SQLserve生成随机字符串 SELECT replace(newid(), '-', '')

  6. Linux 程序设计的一些优化措施

    Linux 程序设计的一些优化措施 这些知识是在平常的阅读中,零散的获得的,自己总结了一下,分享在这里 全局变量VS函数参数 全局变量在Linux下的驱动编程里边,用的是非常多,例如中断服务函数ISR ...

  7. redis实现spring-data-redis整合

    java之redis篇(spring-data-redis整合)  博客链接网址:http://www.cnblogs.com/yjmyzz/tag/redis/ redis的知识:官网 1,利用sp ...

  8. Pure Css 菜单的使用

    本人新手,之前偶尔接触Bootstrap,也做过一些响应式开发,但是都是略显皮毛,公司的业务需求也限制了深入学习. 现着手Pure Css学习,尝试了简单的左边菜单自动隐藏的demo.闲话少说,代码贴 ...

  9. JBoss AS 7性能调优(三)

    原文:http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-4 调优Webserver线程 ...

  10. [Javascript]3. Improve you speed! Performance Tips

    /** Let inheritance help with memory efficiency */ function SignalFire(ID, startingLogs){ this.fireI ...