import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int sumNumbers (TreeNode root) {
if(root == null) {
return 0;
}
int result = 0;
return dfs(root, 0, 0);
}
/**
* @param node 当前节点节点
* @param result 当前累计路径和
* @param value 当前节点上层节点的路径值
*/
public int dfs(TreeNode node, int result, int value) {
node.val = value * 10 + node.val; //当前节点路径值
if(node.left == null && node.right == null) {
return result += node.val; //如果是叶子节点,将值累计在结果上
} else if (node.left == null && node.right != null) {
return dfs(node.right, result, node.val); //如果只有右节点,递归算出右节点的数据加到结果上
} else if (node.left != null && node.right == null) {
return dfs(node.left, result, node.val); //如果只有右节点,递归算出右节点的数据加到结果上
} else { //如果左右节点都存在,递归算出左右节点的值加到结果上
return dfs(node.right, result, node.val) + dfs(node.left, result, node.val);
}
}
}