public int sumNumbers(TreeNode root) {
List<List<Integer>> numbers = getAllNumbers(root);
int sum = 0;
for (List<Integer> number : numbers) {
int num = 0;
for (Integer integer : number) {
num = num*10+integer;
}
sum+=num;
}
return sum;
}
private List<List<Integer>> getAllNumbers(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root == null) {
return res;
}
if (root.left == null && root.right == null) {
//叶子节点
List<Integer> list = new ArrayList<>();
list.add(root.val);
res.add(list);
return res;
}
//非叶子节点
List<List<Integer>> leftNumbers = getAllNumbers(root.left);
List<List<Integer>> rightNumbers = getAllNumbers(root.right);
for (List<Integer> leftNumber : leftNumbers) {
leftNumber.add(0, root.val);
res.add(leftNumber);
}
for (List<Integer> rightNumber : rightNumbers) {
rightNumber.add(0, root.val);
res.add(rightNumber);
}
return res;
}