剑指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届找工作求助阵地#
全部评论

相关推荐

废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务