void sumNumber(TreeNode *root, int cur, int &sum) { if(!root) return; cur = cur * 10 + root->val; if(!root->left && !root->right) { sum += cur; return; } sumNumber(root->left, cur, sum); sumNumber(root->right, cur, sum); }
int calculate(string s) { vector<char> op; vector<int> num; for (int i = 0; i < s.size(); i++) { char ch = s[i]; if (ch == ' ') continue; if (!isdigit(ch)) { op.push_back(s[i]); continue; } else { num.push_back(sumNumber(i, s)); if (!op.empty() && (op.back() == '*' || op.back() == '/')) { int b = num.back(); num.pop_back(); int a = num.back(); num.pop_back(); num.push_back(calcWithOp(a, b, op.back())); op.pop_back(); } } } int ans = num[0]; for (int i = 0; i < op.size(); i++) ans = calcWithOp(ans, num[i + 1], op[i]); return ans; }
int sumNumbers(TreeNode* root) { int sum = 0; sumNumber(root, 0, sum); return sum; }