LeetCode129题—求根节点到叶子结点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。 叶节点 是指没有子节点的节点。
输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径 1->2 代表数字 12
从根到叶子节点路径 1->3 代表数字 13
因此,数字总和 = 12 + 13 = 25
思路:
根节点到叶子节点生成的数字,每当树的层数多一层时,数就会扩大十倍。我们每当遍历到叶子节点时,就将这些数存储到一个List中,最后遍历List集合求和
或者每次遇到叶子节点时就将数返回,不是叶子节点就加上节点的值
//0ms
public int sumNumbers(TreeNode root) {
return Sum(root , 0); //初始和为0.
}
public int Sum(TreeNode root,int value){
if(root == null){
return 0;
}
int num = value * 10 + root.val; //求数,每多一层就要扩大十倍
//如果是叶子节点,就将数返回
if(root.left == null && root.right == null){
return num;
}
//左子树和右子树的和加起来
return Sum(root.left , num) + Sum(root.right , num);
}
//1ms
public int sumNumbers(TreeNode root) {
List<Integer> list = new ArrayList<>();
int sum = 0;
DFS(root,0,list);
for(Integer num : list){
sum += num;
}
return sum;
}
public void DFS(TreeNode root ,int num ,List<Integer> list ){
if(root == null){
return;
}
//判断为叶子节点,就将数存储起来
if(root.left == null && root.right == null ){
num += root.val;
list.add(num);
}
num += root.val; //如果不是叶子节点就加上当前节点的值
DFS(root.left,num*10,list);
DFS(root.right,num*10,list);
}
递归: