:type sum: int :rtype: int """ path = [0] ans = [0] def dfs(node, s): if not node: return s += node.val for x in path: if s - x == sum: ans[0] += 1 path.append(s) dfs(node.left, s) dfs(node.right, s) path.pop() dfs(root, 0) return ans[0] if __name__ == '__main__': from utils import TreeNode f = Solution().pathSum root = TreeNode.make_tree([10, 5, -3, 3, 2, None, 11, 3, -2, None, 1]) assert f(root, 8) == 3 assert f( TreeNode.make_tree([5, 4, 8, 11, None, 13, 4, 7, 2, None, None, 5, 1]), 22) == 3