Sum Root to Leaf Numbers

最后更新于:2022-04-01 22:56:48

**一. 题目描述** Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For example, ~~~ 1 / \ 2 3 ~~~ The root-to-leaf path `1->2` represents the number `12`.  The root-to-leaf path `1->3` represents the number `13`. Return the `sum = 12 + 13 = 25`. **二. 题目分析** 这道题只是一道二叉树的深度优先搜索的题目,在叶结点时将从根到叶结点的路径上的结点的值组成一个十进制的数,本质上还是一道深度优先搜索的题。 **三. 示例代码** ~~~ #include struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { void sumNumbers(TreeNode*root, int &Result, int &TmpResult) { if (!root) { return; } // update the TmpResult TmpResult = TmpResult * 10 + root->val; if (!root->left && !root->right) { Result += TmpResult; } if (root->left) { sumNumbers(root->left, Result, TmpResult); } if (root->right) { sumNumbers(root->right, Result, TmpResult); } // restore the TmpResult; TmpResult = (TmpResult - root->val) / 10; } public: int sumNumbers(TreeNode* root) { int Result = 0; int TmpResult = 0; sumNumbers(root, Result, TmpResult); return Result; } }; ~~~ **四. 小结** 这道题是一道二叉树深度优先搜索的变形题目,考察的还是二叉树的递归遍历,只是换了一种考察方式而已。
';