输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。
1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点
2.叶子节点是指没有子节点的节点
3.路径只能从父节点到子节点,不能从子节点到父节点
4.总节点数目为n
如二叉树root为{10,5,12,4,7},expectNumber为22
则合法路径有[[10,5,7],[10,12]]
#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<int> path;
vector<vector<int>> ret;
void dfs(TreeNode* root,int expectNumber){//对二叉树进行深度优先遍历
if(!root) return;
expectNumber-=root->val;
path.push_back(root->val);
if(!root->left&&!root->right&&!expectNumber)
ret.push_back(path);
dfs(root->left,expectNumber);
dfs(root->right,expectNumber);
path.pop_back();//return返回上一级的时候删除当前路径中的最后一个元素
}
vector<vector<int>> FindPath(TreeNode* root,int expectNumber){
dfs(root,expectNumber);
return ret;
}
};
对于深度优先搜索中return的用法
当路径为1,2,5,9时,当前结点左节点为空,故返回上一级函数,并且在path中删除结点9的值
执行结点5,又结点为空,在path中删除结点5的值,返回上一级函数,类推,完成了深度优先遍历搜索;