题解 | #二叉树根节点到叶子节点的所有路径和#
二叉树根节点到叶子节点的所有路径和
https://www.nowcoder.com/practice/185a87cd29eb42049132aed873273e83
带返回值DFS
import java.util.*;
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int sumNumbers (TreeNode root) {
// write code here
// 先序遍历
if(root==null) return 0;
int res = 0;
return dfs(root,res);
}
public int dfs(TreeNode node,int res){
if(node==null) return 0;
// 何时计算值,res*10?开始是0少乘1个
if(node.left==null && node.right==null) return res*10+node.val;
// 压栈的时候,res值10倍扩大
return dfs(node.left,res*10+node.val)+dfs(node.right,res*10+node.val);
}
}
不带返回值DFS
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
int res = 0;
public int sumNumbers (TreeNode root) {
// write code here
// 先序遍历
if(root==null) return 0;
dfs(root,0);
return res;
}
// 必须要有一个局部遍历控制
public void dfs(TreeNode node,int val){
if(node==null) return;
// 一个递归内部不做累加,最后累加
val = val *10+node.val;
if(node.left==null && node.right==null) res+=val;
dfs(node.left,val);
dfs(node.right,val);
}
}

