/* 题目: 输入一颗二叉树和一个整数,打印从根节点到叶子节点中所有和为该整数的路径。 */ /* 思路: 先序遍历,深度遍历。 从树根开始,记录路径之和,遍历到叶子节点,如果和为期望值,则输出。 回退节点,寻找下一个叶子节点,直到遍历完所有到达叶子节点的路径。 */ #include<iostream> #include<string.h> #include<algorithm> #include<cmath> #include<stdio.h> #include<vector> #include<stack> #include<queue> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; vector<vector<int>> res; vector<int> path; void FindPathCore(TreeNode* root,int expectNumber,int currentNumber){ path.push_back(root->val); currentNumber += root->val; bool isLeaf = (root->left == nullptr && root->right == nullptr) ? true: false; if(currentNumber == expectNumber && isLeaf){ res.push_back(path); } if(root->left != nullptr){ FindPathCore(root->left,expectNumber,currentNumber); } if(root->right != nullptr){ FindPathCore(root->right,expectNumber,currentNumber); } path.pop_back(); } vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(root == nullptr) return res; vector<int> path; int currentNumber = 0; FindPathCore(root, expectNumber, currentNumber); return res; }