题目描述:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路:
路径是从根节点到叶子结点的。dfs。对结果按照要求排序。
代码:
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
bool cmp(vector<int>& A, vector<int>& B) {
return A.size() > B.size();
}
class Solution {
public:
vector<vector<int> > result;
vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
vector<int> temp;
int sum = 0;
find_(root, temp, expectNumber, sum);
sort(result.begin(), result.end(), cmp);
return result;
}
void find_(TreeNode* root, vector<int> temp, int expectNumber, int sum) {
if (root != NULL) cout << root->val << endl;
if (root == NULL || sum > expectNumber) return;
temp.push_back(root->val);
if (sum + root->val == expectNumber && root->left == NULL && root->right == NULL) {
result.push_back(temp);
return;
}
find_(root->left, temp, expectNumber, sum+root->val);
find_(root->right, temp, expectNumber, sum+root->val);
return;
}
};