剑指offer:二叉树中和为某一值的路径
首先定义个无返回值的核心函数有参数(根节点、二维数组结果result、临时数组temp、数字的和也就是最后路径的和)如果根节点为空,则返回;不是的话就把根节点指向的值压入临时数组temp中,如果根节点的左右子树没有,而有根节点的值,那么就把temp的值释放掉,然后压入result二维数组中。当根节点有左右子树时,走一遍核心函数;又用到了另一个函数FindPath(),但调用了上面的核心函数,把得到的result二维数组进行排序,[](const vector<int> &a,const vector<int> &b这个语句,好像是把二维数组变成一维数组,进行比较(后半段理解的不是很透彻),最后返回二维数组。
class Solution{ public: void FindPathCore(TreeNode* root, vector<vector<int>> &result, vector<int> temp,int sumNum){ if(root == nullptr) return ; temp.push_back(root->val); if(root->left==nullptr&& root->right == nullptr&&sumNum == root->val) return result.push_back(temp); else{ if(root->left) FindPathCore(root->left, result, temp, sumNum-root->val); if(root->right) FindPathCore(root->right, result, temp, sumNum-root->val); } temp.pop_back(); } vector<vector<int>> FindPath(TreeNode* root,int expectNumber){ if(root == nullptr) return vector<vector<int>>(); vector<vector<int>> result; vector<int> temp; FindPathCore(root, result, temp, expectNumber); sort(result.begin(),result.end(),[](const vector<int> &a,const vector<int> &b) {//表示的是在lambda(匿名函数)定义之前的域,对外部参数的调用; return a.size()>b.size(); }); return result; } };#剑指offer##23届找工作求助阵地#