题目:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。
思路:
用递归实现稍微简单一点,类似于二叉树的先序遍历,如果满足条件路径上的结点值等于一个整数,并且走到叶子结点,就将这条路径保存下来。如果不满足,将继续搜寻,将路径中值和减去当前根结点的值,然后继续递归在左子树和右子树中查找。如果是叶子结点又不满足要求,退回到父结点,删除当前节点。
class Solution {
public:
vector<vector<int> > allPath;
vector<int> tmp;
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
if(root == NULL)
return allPath;
//类似于二叉树的先序遍历
tmp.push_back(root->val);//先压根结点
//如果满足条件,则将这条路保存
if(root->val==expectNumber && root->left==NULL && root->right==NULL)
allPath.push_back(tmp);
//递归在左子树和右子树,但传入参数改变,路径和应减去当前根结点的值
FindPath(root->left, expectNumber-root->val);
FindPath(root->right, expectNumber-root->val);
if(tmp.size()!=0)//如果是叶子结点又不满足要求,退回到父结点,删除当前节点
tmp.pop_back();
return allPath;
}
};