剑指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届找工作求助阵地#
查看20道真题和解析
