题目描述
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
实现:
class Solution { vector<int> in ; vector<vector<int>> out ; public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(!root) return out; in.push_back(root->val); if(root->left == 0 && root->right == 0 && root->val == expectNumber) { out.push_back(in); } if(root->left) { FindPath(root->left,expectNumber - root->val); if(!in.empty()) in.pop_back(); } if(root->right) { FindPath(root->right,expectNumber - root->val); if(!in.empty()) in.pop_back(); } return out; } };
样例做法:
class Solution { vector<int> in ; vector<vector<int>> out ; public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) { if(!root) return out; in.push_back(root->val); if(root->left == 0 && root->right == 0 && root->val == expectNumber) { out.push_back(in); } if(root->left) { FindPath(root->left,expectNumber - root->val); } if(root->right) { FindPath(root->right,expectNumber - root->val); } if(!in.empty()) in.pop_back(); return out; } };
本来还以为样例不对,
3
5 8
2 6 7 9
本来认为5为根时遍历完左右没有弹出5,后来终于想通,忘记了以5为根时后面还会走if弹出。