Q:给定一个仅包含数字0-9的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1->2->3,那么这条路径就用123来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
1↵ / ↵ 2 3
根节点到叶子节点的路径1->2用数字12代替
根节点到叶子节点的路径1->3用数字13代替
所以答案为12+13=25
A:牵扯到树的一般就是递归。
public static int sumNumbers(TreeNode root) {
ArrayList<Integer> array = new ArrayList<>();
if (root == null)
return 0;
int sum = root.val;
if(root.left == null && root.right == null)//如果只有一个根节点
array.add(sum);
//如果根节点没有左右子树,就不是路径了
if (root.left != null)
dfs(array, sum, root.left);
if (root.right != null)
dfs(array, sum, root.right);
int count = 0;
for (Integer integer : array) {
count += integer;
}
return count;
}
public static void dfs(ArrayList<Integer> array, int sum, TreeNode root) {
if (root.left == null && root.right == null) {
sum = sum * 10 + root.val;
array.add(sum);
return;
}
int temp = sum;//这里是避免在dfs left时改变sum
if (root.left != null) {
sum = sum * 10 + root.val;
dfs(array, sum, root.left);
}
if (root.right != null) {
temp = temp * 10 + root.val;
dfs(array, temp, root.right);
}
}