輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和爲輸入整數的全部路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所通過的結點造成一條路徑。blog
深度優先遍歷+回溯.get
出點就是,當target==0,且節點沒有子樹的時候。class
vector<vector<int>> FindPath(TreeNode *root, int target) { vector<vector<int>> ret; vector<int> tmp; aux(root, target, tmp, ret); return ret; } void aux(TreeNode *root, int target, vector<int> &tmp, vector<vector<int>> &ret) { if (root != nullptr) { tmp.push_back(root->val); if (target - root->val == 0 && root->left == nullptr && root->right == nullptr) { ret.push_back(tmp); // 這裏pop的緣由在於,下面須要return ,若是不pop會影響和偶棉的結果 tmp.pop_back(); return; } aux(root->left, target - root->val, tmp, ret); aux(root->right, target - root->val, tmp, ret); tmp.pop_back(); } }