题目:

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

思路:

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. C/C++内存存储问题

    #include <stdio.h> #include "string.h" #include "malloc.h" void Swap(int a ...

  2. OpensStack instance debug

    错误: 创建实例 "RuiyTest23" 失败: 请稍后再试 [错误: Virtual Interface creation failed].

  3. MFC调用c#的dll

    一.使用 /clr 编译 MFC 可执行文件或规则 DLL 1.打开“项目属性”对话框,方法是右键单击“解决方案资源管理器”中的项目并选择“属性”. 2.展开“配置属性”旁边的节点并选择“常规”.在右 ...

  4. 计算机程序的思维逻辑 (63) - 实用序列化: JSON/XML/MessagePack

    上节,我们介绍了Java中的标准序列化机制,我们提到,它有一些重要的限制,最重要的是不能跨语言,实践中经常使用一些替代方案,比如XML/JSON/MessagePack. Java SDK中对这些格式 ...

  5. Hibernate框架增删改查

    package cn.happy.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org ...

  6. javascript 将递归转化为循环

    function tco(f) { var value; var active = false; var accumulated = []; return function accumulator() ...

  7. [置顶] LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句

    LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 declare @sql varchar(4000), @dirpath varch ...

  8. Qt快速入门系列教程目录

    Qt快速入门系列教程目录

  9. php使用session来保存用户登录信息

    php使用session来保存用户登录信息 使用session保存页面登录信息 1.数据库连接配置页面:connectvars.php <?php //数据库的位置 define('DB_HOS ...

  10. HTML 表单与输出

    我们先来设置一个简单的表单 <!doctype html><html><head> <meta charset="utf-8"> & ...