bool hasPathSum(TreeNode *root, int sum) { // Start typing your C/C++ solution below // DO NOT write int main() function std::stack<path_element> s; std::vector<path_element> v; if (!root) { return false; } path_element r; r.node = root; r.level = 1; s.push(r); v.push_back(r); while (!s.empty()) { path_element tmp, p = s.top(); s.pop(); addNodeToPath(&v, p); if (!(p.node->right) && !(p.node->left)) { if (verifyPathSum(&v, sum)) { return true; } continue; } if ((p.node)->right) { tmp.node = (p.node)->right; tmp.level = p.level + 1; s.push(tmp); } if ((p.node)->left) { tmp.node = (p.node)->left; tmp.level = p.level + 1; s.push(tmp); } } // while return false; }
int sumNumbers(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function std::stack<path_element> s; std::vector<path_element> v; int sum = 0; if (!root) { return sum; } path_element r; r.node = root; r.level = 1; s.push(r); v.push_back(r); while (!s.empty()) { path_element tmp, p = s.top(); s.pop(); addNodeToPath(&v, p); if (!(p.node->right) && !(p.node->left)) { sum += computeRootLeafSum(&v); continue; } if ((p.node)->right) { tmp.node = (p.node)->right; tmp.level = p.level + 1; s.push(tmp); } if ((p.node)->left) { tmp.node = (p.node)->left; tmp.level = p.level + 1; s.push(tmp); } } return sum; }