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);  
        }
    }
}