二叉树中和为某一值的路径
2016-06-14 12:18
337 查看
题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。算法:需要从根节点值开始,所有dfs中只有前序遍历满足条件使用path数组记录路径,每次到遍历完一个节点的最后应该pop_back(),并返回上一层。代码#include <iostream> #include <vector> using namespace std; 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> > res; vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(root==NULL) return res; vector<int> path; preFind(root,expectNumber,path); return res; } void preFind(TreeNode* root,int expectNumber,vector<int> path){ path.push_back(root->val); if(root->left!=NULL){ preFind(root->left,expectNumber,path); } if(root->right!=NULL){ preFind(root->right,expectNumber,path); } int sum = 0; for (int i = 0; i < path.size(); ++i) { sum += path[i]; } if(sum == expectNumber && root->right==NULL && root->left==NULL){ res.push_back(path); } path.pop_back(); sum = 0; } }; int main() { TreeNode *root= new TreeNode(10); TreeNode *r1l = new TreeNode(5); TreeNode *r1r = new TreeNode(12); TreeNode *r2l = new TreeNode(4); TreeNode *r2r = new TreeNode(7); root->left = r1l; root->right = r1r; r1l->left = r2l; r1l->right = r2r; vector<vector<int>>res; Solution s; res = s.FindPath(root,22); cout << "Hello, World!" << endl; return 0; }
相关文章推荐
- 二叉搜索树的后序遍历序列
- 栈的压入、弹出序列
- 顺时针打印矩阵
- 重建二叉树
- Generate Parentheses
- Populating Next Right Pointers in Each Node
- 计算树中值最大路径
- Single Number II
- Best Time to Buy and Sell Stock II
- Unique Binary Search Trees
- Linked List Cycle
- python学习笔记 异步asyncio
- Integer to Roman (罗马数字转换)
- Ubuntu搭建boa服务器
- Single Number III
- ZigZag Conversion
- Maven使用nexus配置,SNAPSHOT版本介绍及发布jar到nexus
- 字符串匹配的KMP算法
- Scala数组操作
- 二叉排序树删除结点