113. Path Sum II 这里要注意 引用 和 传值的区别,见注释

来源:互联网 发布:数据库安全管理办法 编辑:程序博客网 时间:2024/06/15 19:13

题目:

Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

For example:
Given the below binary tree and sum = 22,
              5             / \            4   8           /   / \          11  13  4         /  \    / \        7    2  5   1

return

[   [5,4,11,2],   [5,8,4,5]]
代码和思路:

vector<vector<int>> pathSum(TreeNode* root, int sum) {        vector<int> fa;        vector<vector<int>> ans;        help(root, sum, fa, ans );        return ans;    }
下面是传值:

void help(TreeNode* root, int sum, vector<int> &father, vector<vector<int>>& ans)    {        if(root == NULL) return ;        vector<int> temp(father);        temp.push_back(root->val);        if(root->left == NULL && root->right == NULL){            if(root->val == sum){                ans.push_back(temp);            }            return ;        }        help(root->left, sum - root->val, temp, ans);        help(root->right, sum - root->val, temp, ans);    }
相当于:

void help(TreeNode* root, int sum, vector<int> father, vector<vector<int>>& ans)    {        if(root == NULL) return ;        /*vector<int> temp(father);        temp.push_back(root->val);*/                father.push_back(root->val);        if(root->left == NULL && root->right == NULL){            if(root->val == sum){                ans.push_back(father);            }            return ;        }        help(root->left, sum - root->val, father, ans);        help(root->right, sum - root->val, father, ans);    }
而对于引用传递的话一定要进行pop操作,注意体会:这里就是回溯法

void help(TreeNode* root, int sum, vector<int> &father, vector<vector<int>>& ans)    {        if(root == NULL) return ;                father.push_back(root->val);        if(root->left == NULL && root->right == NULL){            if(root->val == sum){                ans.push_back(father);            }            //return ;这里return一定要去掉 注意体会 因为在下面两个help中若找不到(没有root->val == sum)那么就要pop_back.就是一种回溯法        }        help(root->left, sum - root->val, father, ans);        help(root->right, sum - root->val, father, ans);        father.pop_back();    }

最后一个help只要9msAC,说明引用传递效率要高。







0 0
原创粉丝点击