给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
示例:
思路:
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
if (root == NULL) return 0;
int res = 0;
int sum_cur;
stack<pair<TreeNode*, vector<int> >> m_stack;
pair<TreeNode*, vector<int> > temp;
TreeNode* left, *right;
vector<int> path;
path.push_back(root->val);
m_stack.push(make_pair(root, path));
while (!m_stack.empty()) {
temp = m_stack.top();
m_stack.pop();
sum_cur = 0;
for (int i = temp.second.size()-1; i>= 0; i--) {
sum_cur+= temp.second[i];
if (sum_cur == sum) ++res;
}
left = temp.first->left;
right = temp.first->right;
if (left!= NULL) {
temp.second.push_back(left->val);
m_stack.push(make_pair(left, temp.second));
temp.second.pop_back();
}
if (right!= NULL) {
temp.second.push_back(right->val);
m_stack.push(make_pair(right, temp.second));
temp.second.pop_back();
}
}
return res;
}
};
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> int:
stack = [(root,[])]
res = 0
while stack:
node, tmp = stack.pop()
if not node: continue
tmp = [i+node.val for i in tmp] + [node.val]
res += tmp.count(sum)
stack.append((node.left,tmp))
stack.append((node.right,tmp))
return res