题目:
Given a binary tree containing digits from 0-9
only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3
which represents the number 123
.
Find the total sum of all root-to-leaf numbers.
For example,
1
/ \
2 3
The root-to-leaf path 1->2
represents the number 12
.
The root-to-leaf path 1->3
represents the number 13
.
Return the sum = 12 + 13 = 25
.
就是给定一棵二叉树,然后求遍历所有从根节点到叶子节点的路径上的和,注意,这个路径上的和采用的是字符串累加的方式,和平时的有点区别。这题其实和Path Sum II基本一样,就是采用递归+回溯的方法来实现,但是要注意的是全局变量和局部变量,否则就出错了。每一次当走到叶子节点的时候,都将前面积累的那一天路径上的值加进去,并且删除那个叶子节点,要走到叶子节点的父节点上。递归就是不停地走到叶子节点上,而回溯则是回到叶子节点的父节点上。
public class Solution
{
StringBuffer sb = new StringBuffer();
int sum = 0; //注意这个全局变量
public int sumNumbers(TreeNode root)
{
dfs(root,sb);
return sum;
}
public void dfs(TreeNode root,StringBuffer st)
{
int sum1 = 0;
if(root == null)
return;
st.append(root.val);
if(root.left == null && root.right == null)
{
StringBuffer sb1 = new StringBuffer(); //这里新开一个StringBuffer,因为当遍历到叶子节点的时候,那么就考虑将路径直接加入到求和里了
sb1 = st;
String str = sb1.toString();
sum += Integer.parseInt(str.toString());
//System.out.println(sum);
}
else
{
if(root.left != null)
dfs(root.left,st);
if(root.right != null)
dfs(root.right,st);
}
//System.out.println(st.length());
st.deleteCharAt(st.length() - 1); //这里是回溯的思想,每一次都回到叶子节点的父节点上
}
}