129. 求根节点到叶节点数字之和
129. 求根节点到叶节点数字之和
给你一个二叉树的根节点root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
- 例如,从根节点到叶节点的路径
1 -> 2 -> 3表示数字123。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3] 输出:25 解释: 从根到叶子节点路径1->2代表数字12从根到叶子节点路径1->3代表数字13因此,数字总和 = 12 + 13 =25
示例 2:
输入:root = [4,9,0,5,1] 输出:1026 解释: 从根到叶子节点路径4->9->5代表数字 495 从根到叶子节点路径4->9->1代表数字 491 从根到叶子节点路径4->0代表数字 40 因此,数字总和 = 495 + 491 + 40 =1026
提示:
- 树中节点的数目在范围
[1, 1000]内 0 <= Node.val <= 9- 树的深度不超过
10
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode() : val(0), left(nullptr), right(nullptr) {} 8 * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 9 * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 10 * }; 11 */ 12 class Solution { 13 public: 14 void preOrder(TreeNode *root, int sum, vector<int> &answer) { 15 if (root == nullptr) { 16 return; 17 } 18 sum = sum * 10 + root->val; 19 if (root->left == nullptr && root->right == nullptr) { 20 answer.push_back(sum); 21 } 22 preOrder(root->left, sum, answer); 23 preOrder(root->right, sum, answer); 24 return; 25 } 26 int sumNumbers(TreeNode* root) { 27 int sum = 0; 28 if (root == nullptr) { 29 return sum; 30 } 31 vector<int> answer; 32 preOrder(root, sum, answer); 33 for (auto &val : answer) { 34 sum += val; 35 } 36 return sum; 37 } 38 };