JZ24 剑指offer 二叉树中和为某一值的路径

第24题 二叉树中和为某一值的路径

题目描述

输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

/*
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> > ret;
    vector<int> path;
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
     
        if(!root) return ret;
        path.push_back(root->val);
        expectNumber -= root->val;
        if(expectNumber==0 && !root->left && !root->right){
     
            ret.push_back(path);
        }
        auto re1 = FindPath(root->left, expectNumber);
        auto re2 = FindPath(root->right, expectNumber);
        path.pop_back();
        return ret;
    }
};

思路:
ret用于存储所有满足条件路径,path保存当前路径,先序遍历二叉树,递归进行。先将根节点放入路径,expectNumber值减去根节点数值,判断当前expectNumber值为0且左右子树为空,将当前路径放入路径数组,再递归遍历左右子树,每层递归退回时,说明包含当前节点已遍历完毕,将当前路径值出当前路径。最后返回结果数组ret。

你可能感兴趣的:(剑指)