题目
- 求根节点到叶节点数字之和
给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
思路
- 一眼递归,怎么二叉树总是要递归,又有点回溯的意思。
- 还挺简单的,二叉树递归做多了是不是就手熟了。
代码
int sum=0;
public int sumNumbers(TreeNode root) {
if(root.left==null && root.right==null) return root.val;
//递归 记录当前的数字
//根节点
int val = root.val;
LinkedList<Integer> ll = new LinkedList<>();
ll.add(val);
if(root.left!=null) DFS(root.left,ll);
if(root.right!=null) DFS(root.right,ll);
return sum;
}
public void DFS(TreeNode root,LinkedList<Integer> ll){
//走到叶子节点说明已经可以计算了
if(root.left==null && root.right==null){
ll.add(root.val);
int temp=0;
int nums=1;
for(int i=ll.size()-1;i>=0;i--){
temp+=ll.get(i)*nums;
nums*=10;
}
sum+=temp;
ll.removeLast();
return;
}
//否则 将其加入ll
ll.add(root.val);
if(root.left!=null) DFS(root.left,ll);
if(root.right!=null) DFS(root.right,ll);
ll.removeLast();
return;
}