1,问题简述
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
2,示例
略,本来这个地方是有示例说明的,但是自己在发出来的时候,这道题由于文字重复性很多,所以不给标记原创了,那我觉得既然是自己写的,肯定要标记一下原创的,毕竟输出一篇自己喜欢以及想分享的内容很有意义,所以这里凑了一下字数标记一下
3,题解思路
深度优先遍历的使用
4,题解程序
public class SumNumbersTest {
private static int sum = 0;
public static void main(String[] args) {
TreeNode t1 = new TreeNode(4);
TreeNode t2 = new TreeNode(9);
TreeNode t3 = new TreeNode(0);
TreeNode t4 = new TreeNode(5);
TreeNode t5 = new TreeNode(1);
t1.left = t2;
t1.right = t3;
t2.left = t4;
t2.right = t5;
int sumValue = sumNumbers(t1);
System.out.println("sumValue = " + sumValue);
}
public static int sumNumbers(TreeNode root) {
if (root == null) {
return sum;
}
computeSum(root, 0);
return sum;
}
private static void computeSum(TreeNode root, int father) {
if (root == null) {
return;
}
int current = father * 10 + root.val;
if (root.left == null && root.right == null) {
sum += current;
return;
}
computeSum(root.left, current);
computeSum(root.right, current);
}
}
5,题解程序图片版
6,总结
广度优先搜索的使用。