112. Path Sum

Question

LeetCode Problem

Image: View on LeetCode

Given the root of a binary tree and an integer targetSum , return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum .
A leaf is a node with no children.
Example 1:

Input: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22 Output: true Explanation: The root-to-leaf path with the target sum is shown.

Example 2:

Input: root = [1,2,3], targetSum = 5 Output: false Explanation: There are two root-to-leaf paths in the tree:
(1 --> 2): The sum is 3.
(1 --> 3): The sum is 4.
There is no root-to-leaf path with sum = 5.

Example 3:

Input: root = [], targetSum = 0 Output: false Explanation: Since the tree is empty, there are no root-to-leaf paths.

Constraints:


Solutions

Use iteration + a custom data type in a stack (store in heap)

bool hasPathSum(TreeNode* root, int targetSum) {
	if (root == nullptr) return false;
	stack<pair<TreeNode*, int>> st;
	st.emplace(root, root->val);
	while (!st.empty()) {
		auto [node, sum] = st.top();
		st.pop();
		if (!node->left && !node->right && sum == targetSum) {
			return true;
		}
		if (node->right) st.emplace(node->right, sum + node->right->val);
		if (node->left) st.emplace(node->left, sum + node->left->val);
	}
	return false;
}