题解 | #牛奶产量总和#
牛奶产量总和
https://www.nowcoder.com/practice/0932ea3bd8514c79849cc658108053bb
知识点:递归
思路: 还是那句话理解递归的本质,可以发现这个路径其实就是递归的路程,
那么,我们只需要维持一个可变长的数组,递归则加深,递归回去就减少,
递归到叶子节点的时候,我们就计算和
改进:这里我是传入的参数数组cur进去的,添加和remove元素,但是其实在函数里声明
一个数组,然后直接添加元素也是可以的,因为,当递归回调的时候,就会返回最初添加的状态
编程语言:java
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int compute(List<Integer> list) {
//根据数组计算数字
int sum = 0;
int k = 1;
for (int i = list.size() - 1; i >= 0; i--) {
sum += list.get(i) * k;
k = k * 10;
}
return sum;
}
public void get_rootToLeaf_sum(TreeNode root, List<Integer> cur,
List<Integer> result) {
if (root == null)
return;
//前置处理
if (root != null)
cur.add(root.val);
if (root.left == null && root.right == null) {
//叶子节点的时候,一次奶牛路径
//处理cur
result.add(compute(cur));
}
get_rootToLeaf_sum(root.left, cur, result);
get_rootToLeaf_sum(root.right, cur, result);
//后置处理
//处理节点4完事后的事情,回到2
//这里长度减1其实就可以了
cur.remove(cur.size() - 1);
}
public int sumNumbers (TreeNode root) {
// write code here
List<Integer> cur = new ArrayList<>();
List<Integer> result = new ArrayList<>();
get_rootToLeaf_sum(root, cur, result);
int sum = 0;
for (int i = 0; i < result.size(); i++)
sum += result.get(i);
return sum;
}
}

查看23道真题和解析