From 008a8234cfe728c42659a7007dc8b36907893dee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= Date: Wed, 10 Jul 2019 23:24:28 +0800 Subject: [PATCH] Create 129. Sum Root to Leaf Numbers.md --- solutions/129. Sum Root to Leaf Numbers.md | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 solutions/129. Sum Root to Leaf Numbers.md diff --git a/solutions/129. Sum Root to Leaf Numbers.md b/solutions/129. Sum Root to Leaf Numbers.md new file mode 100644 index 0000000..f9e8321 --- /dev/null +++ b/solutions/129. Sum Root to Leaf Numbers.md @@ -0,0 +1,24 @@ +# [129. Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers/) +# 思路 +采用递归的思路:用sum记录根到某节点组成数字的值,那么每遇到一个子结点的数字,要把之前sum的数字扩大10倍之后再加上当前节点的值。 +如果遍历到叶结点了,就将当前的累加结果sum返回。如果不是,则对其左右子结点分别调用递归函数,将两个结果相加返回即可。 + +当然也可以改成非递归的,可以用当前节点的val记录上述的sum:将自己的val加上父节点的val乘10作为新的val,例如`node->left->val += 10 * node->val`,代码这里 +就不放了。 + +# C++ +``` C++ +class Solution { +private: + int helper(TreeNode* root, int sum){ + if(!root) return 0; + sum = sum * 10 + root -> val; + if(!root -> left && !root -> right) return sum; + return helper(root -> left, sum) + helper(root -> right, sum); + } +public: + int sumNumbers(TreeNode* root) { + return helper(root, 0); + } +}; +```