题目:牛客网

解题思路:

递归

若当前结点无左右子树,则返回当前节点的值;

若当前结点有左右子树,则改变其左右子树的value值,将当前结点的value值乘10加到其左右子树的value值上,返回fun(left)+fun(right);

若当前节点只有左子树或只有右子树,则改变其左或右子树的value值,将当前结点的value值乘10加到其左或右子树的value值上,返回fun(left)或fun(right);

 

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public int sumNumbers(TreeNode root) {
        if(null == root)
            return 0;
        int sum = 0;
        if(root.left == null && root.right == null){
            return root.val;
        }
        else if(root.left != null && root.right == null){
            root.left.val = root.val*10+root.left.val;
            return sumNumbers(root.left);
        }
        else if(root.left == null && root.right != null){
            root.right.val = root.val*10+root.right.val;
            return sumNumbers(root.right);
        }
        else{
            root.left.val = root.val*10+root.left.val;
            root.right.val = root.val*10+root.right.val;
            return sumNumbers(root.right)+sumNumbers(root.left);
        }
    }
}