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

来源:互联网 发布:nba2k16奥尼尔捏脸数据 编辑:程序博客网 时间:2024/05/21 11:30

题目描述

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

算法:
前序遍历访问某一节点时,将值累加。
1、如果该结点为叶节点并且累加和等于target输出结果
2、如果该结点为叶节点但累加和不等于target则不输出结果
3、如果该结点非叶节点则继续遍历

PS:需要注意的是处理完本节点后,都该将PATH和SUM减去结点值。

class Solution {public:    vector<vector<int>> PathResult;    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {        if(root == NULL)            return PathResult;        vector<int>path;        int current_sum = 0;        helper(root,expectNumber,path,current_sum);        return PathResult;    }    void helper(TreeNode* root,int expectNumber,vector<int> & path,int &current_sum){        current_sum += root->val;        path.push_back(root->val);        //到达叶节点        if(root->left == NULL && root->right == NULL){            if(current_sum == expectNumber)                PathResult.push_back(path);        }            //非叶节点继续前序遍历        else{            if(root->left != NULL)                helper(root->left,expectNumber,path,current_sum);            if(root->right != NULL)                helper(root->right,expectNumber,path,current_sum);        }        path.pop_back();        current_sum -= root->val;    }};
0 0
原创粉丝点击