问题描述
给定一个二叉树,用树的路径表示一个数字(从根节点到叶子节点经过的节点按先后顺序组成的数字),要求找出所有树路径代表的数字之和。题目链接:**点我**
样例输入输出
输入:[1, 2, 3]
输出:25
说明:输入代表以下的树
1
/ \
2 3
树路径代表的数字为:12、13,和为 25
输入:[1, 2, 3, 4]
输出:137
说明:输入代表以下的树
1
/ \
2 3
/
4
树路径代表的数字为:124、13,和为137
问题解法
采用先序遍历树的方式,遍历过程中记录从根节点到当前节点路径代表的数字,每次在到达叶子节点时,将这个数字加到全局变量中。待树遍历结束后,全局变量的值就是答案。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
class Solution { private int total = 0; public int sumNumbers(TreeNode root) { sumNumbers(root, 0); return total; } private void sumNumbers(TreeNode root, int num) { if (root == null) { return; } num = num * 10 + root.val; if (root.left == null && root.right == null) { total += num; return; } sumNumbers(root.left, num); sumNumbers(root.right, num); } }
|