LeetCode - sum-root-to-leaf-numbers

题目:

Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path1->2->3which represents the number123.

Find the total sum of all root-to-leaf numbers.

For example,

    1/ \2   3

 

The root-to-leaf path1->2represents the number12.
The root-to-leaf path1->3represents the number13.

Return the sum = 12 + 13 =25.

大概意思:

给定一个只包含0-9位数字的二叉树,每个根到叶的路径都可以表示一个数字。

一个例子是根到叶的路径1->2->3,它表示数字123。

求从根节点到叶子节点的值的和。

解题思路:

先序遍历+数字求和(每一层都比上层和*10+当前根节点的值)

如果遍历到叶子节点,就把当前累加的结果sum返回,如果不是就对左右子节点调用递归函数,将两结果相加返回

需要注意的是sum不能是全局变量,需要遍历某一边之后将其置1

如果节点数超过个位数,那么这个方法也是不管用了

 

代码如下:

     public int sumNumbers(TreeNode root) {if(root == null ) {return 0;}int sum =0;return DFS(root,sum);}public int DFS(TreeNode root,int sum) {if(root == null) {return 0;}sum = sum*10 + root.val;if(root.left == null && root.right == null) {return sum;}return DFS(root.left,sum)+DFS(root.right,sum);}