- 题目描述
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
- 思路
回溯。
- C++实现
class Solution {
public:
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<vector<int> > paths;
vector<int> path;
FindPath(root,expectNumber,path,paths);
return paths;
}
private:
void FindPath(TreeNode* node,int expectNumber,vector<int> &path,vector<vector<int>> &paths){
if(node==NULL)return;
path.push_back(node->val);
//当前节点为根节点,且路径和为期望值
if(node->left==NULL&&node->right==NULL&&node->val==expectNumber)
paths.push_back(path);
else{//当前节点不为根节点
FindPath(node->left,expectNumber-node->val,path,paths);//探索左子树
FindPath(node->right,expectNumber-node->val,path,paths);//探索右子树
}
//搜索完成后,回溯
path.pop_back();
}
};