剑指offer-24.二叉树中和为某一值的路径

来源:互联网 发布:java rsa加密算法 编辑:程序博客网 时间:2024/06/05 06:45

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


思路:判断节点值是否与给定值相等,相等对该路径进行回收,如果不相等,对左子树和右子树进行递归,注意,在对左子树和右子树进行递归时,第二个参数一定要用给定值减去上一个值。(PathFind(tree->left,sum - tree->val);)例如对左子树进行递归,第二个参数为sum - tree->val;非递归方法目前还没有想出来,想到了,思路清晰了再进行补充


/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {    vector<vector<int> >res;    vector<int>temp;    void PathFind(TreeNode* tree,int sum)    {        temp.push_back(tree->val);        if (tree->val == sum && !tree->left && !tree->right)//从根节点到叶子节点        {            res.push_back(temp);        }        else        {            if (tree->left)            {                PathFind(tree->left,sum - tree->val);            }            if (tree->right)            {                PathFind(tree->right,sum - tree->val);            }        }        temp.pop_back();//如果不符合及时弹出,恢复环境            }public:    vector<vector<int> > FindPath(TreeNode* root,int expectNumber)     {        if(root)            PathFind(root,expectNumber);        return res;    }};




0 0