NC 8 二叉树根节点到叶子节点和为指定值的路径

Posted coder 靓仔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NC 8 二叉树根节点到叶子节点和为指定值的路径相关的知识,希望对你有一定的参考价值。

情景提要

    牛客题解系列,按照题号顺序开始。







NC8 

二叉树根节点到叶子节点和为指定值的路径









01




题目描述

NC 8 二叉树根节点到叶子节点和为指定值的路径

返回

[[5,4,11,2],
 [5,8,9]]



02




输入输出示例

入: 

     {1,2} 1

输出: 

     []


03




题目分析



思路


     本题和NC5 几乎是一样的,依然是递归和迭代两种方法都可以做,只需要改变一下到了根节点时的判断条件就可以了。这里靓仔就偷个懒,只写一下递归的方法啦。

     和NC5不一样的是,这里靓仔并没有修改树的结点值,而是使用了中间变量,用的回溯的思想。改变结点的值还是使用中间变量,只是程序实现的两种方式而已。


03




代码实现


方法


/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
class Solution {public: /** * * @param root TreeNode类 * @param sum int整型 * @return int整型vector<vector<>> */ // 回溯 vector<vector<int> > res; vector<int> tmp; vector<vector<int> > pathSum(TreeNode* root, int sum) { // write code here if(root){ tmp.push_back(root->val); travel(root,sum,root->val); } return res; } void travel(TreeNode* root,int sum,int cursum){ if(root->left){ tmp.push_back(root->left->val); travel(root->left,sum,cursum+root->left->val); tmp.pop_back(); } if(root->right){ tmp.push_back(root->right->val); travel(root->right,sum,cursum+root->right->val); tmp.pop_back(); } else if(!root->left && !root->right){ if(sum == cursum) res.push_back(tmp); return; } }};



04




NC 8 二叉树根节点到叶子节点和为指定值的路径

     又是一道之前题目的小变体哦

欢迎评论区留言讨论哦







以上是关于NC 8 二叉树根节点到叶子节点和为指定值的路径的主要内容,如果未能解决你的问题,请参考以下文章

牛客题霸 NC8 二叉树根节点到叶子节点和为指定值的路径

[javascript]二叉树根节点到叶子节点和为指定值的路径

二叉树根节点到叶子节点的所有路径和(NC5/考察次数Top53/难度中等)

NC5 二叉树根节点到叶子节点的所有路径和

二叉树中是否存在节点和为指定值的路径(NC9/考察次数Top63/难度简单)

二叉树中是否存在节点和为指定值的路径(NC9/考察次数Top63/难度简单)