分析:
此問題不難,主要是一個深度優(yōu)先算法,使用了一個stringbuffer記錄當(dāng)前的路徑,每次找到一個葉節(jié)點,就記下當(dāng)前的值。當(dāng)返回到上一層節(jié)點,注意要刪除最后一次用來回朔。
代碼如下:
public class SumTreeNodes {
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
StringBuffer current = new StringBuffer();
int sum = 0;
private void dfs(TreeNode node){
int val = node.val;
current.append(val+"");
if(node.left==null && node.right==null){ //leaf here
sum += Integer.parseInt(current.toString());
}
else{
if(node.left!=null){
dfs(node.left);
current.setLength(current.length()-1);
}
if(node.right!=null){
dfs(node.left);
current.setLength(current.length()-1);
}
}
}
public int sumNumbers(TreeNode root) {
sum = 0;
current.setLength(0);
if(root!=null){
dfs(root);
}
return sum;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
StringBuffer current = new StringBuffer();
int sum = 0;
private void dfs(TreeNode node){
int val = node.val;
current.append(val+"");
if(node.left==null && node.right==null){ //leaf here
sum += Integer.parseInt(current.toString());
}
else{
if(node.left!=null){
dfs(node.left);
current.setLength(current.length()-1);
}
if(node.right!=null){
dfs(node.left);
current.setLength(current.length()-1);
}
}
}
public int sumNumbers(TreeNode root) {
sum = 0;
current.setLength(0);
if(root!=null){
dfs(root);
}
return sum;
}
}