Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.
For example:
Given the below binary tree and sum = 22
,
5 / 4 8 / / 11 13 4 / 7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2
which sum is 22.
Subscribe to see which companies asked this question
recursion版本
bool hasPathSum(TreeNode* root, int sum) { if (!root) return false; if ((root->val == sum) && (root->left == nullptr && root->right == nullptr)) return true; return hasPathSum(root->left, sum - root->left->val) || hasPathSum(root->right, sum - root->right->val); }
non-recursion版本
bool hasPathSum(TreeNode* root, int sum) { if (root == nullptr) return false; stack<TreeNode*> sta; sta.push(root); sum -= root->val; TreeNode* lastRoot = root; while (!sta.empty()) { root = sta.top(); if (lastRoot != root->right) { if (lastRoot != root->left) { if (root->left != nullptr) { sta.push(root->left); sum -= root->left->val; continue; } } if (root->right != nullptr) { sta.push(root->right); sum -= root->right->val; continue; } else if(root->left == nullptr && sum == 0) return true; } lastRoot = root; sta.pop(); sum += root->val; } return false; }