leetcode-剑指34-OK

// language C with STL(C++)
// 剑指34
// https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/
// 同主站113
// https://leetcode-cn.com/problems/path-sum-ii/


/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int sum) {
    	// 维护一个int change表示vector内的int之和,后续遍历访问root为根的二叉树,访问一个节点 = 检查if change == sum
    	vector<vector<int>> answer;
    	vector<int> gongju;
    	int change = 0;


		stack<TreeNode*> ans;	//用来遍历的栈
		TreeNode* p=root;
		TreeNode* pre = NULL;
		TreeNode* temp;
		while(p || !empty(ans)){
			if(p){
				ans.push(p);
				gongju.push_back(p->val);
				change += p->val;
				p= p->left;
			}else{
				p = ans.top();
				if((p->right != NULL) && (p->right !=pre)){
					p = p->right;
					ans.push(p);
					gongju.push_back(p->val);
					change += p->val;
					p = p->left;
				}else{
					temp = ans.top();
					if(change==sum){
						if((temp->left==NULL)&&(temp->right ==NULL)){
							vector<int> what(gongju);
							answer.push_back(what);
						}
					}
					change -= temp->val;
					gongju.pop_back();
					ans.pop();
					pre = temp;
					p = NULL;
				}
			}
		}
        return answer;
    }
};
原文地址:https://www.cnblogs.com/gallien/p/14367964.html