题目如下:
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25
解法思路:
深度优先搜索+List存储+List转化成数字
整体代码如下:
package org.example.leetcode_129;
import org.example.TreeNode;
import java.util.ArrayList;
import java.util.List;
class Solution {
int sum = 0;
public int sumNumbers(TreeNode root) {
dfs(root, new ArrayList<Integer>());
return sum;
}
/**
* 深度优先搜索,并且使用List存储该数据
*
* @param root
* @param list
*/
private void dfs(TreeNode root, List<Integer> list) {
List<Integer> newList = new ArrayList<>(list);
newList.add(root.val);
if (root.left != null) {
dfs(root.left, newList);
}
if (root.right != null) {
dfs(root.right, newList);
}
if (root.left == null && root.right == null) {
int temp = parseList(newList);
sum += temp;
}
}
/**
* 将List转化成数字
*
* @param newList
* @return
*/
private int parseList(List<Integer> newList) {
int temp = 0;
for (int i = 0; i < newList.size(); i++) {
temp = temp * 10 + newList.get(i);
}
return temp;
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
Solution solution = new Solution();
System.out.println(solution.sumNumbers(root));
}
}