- 描述
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.
- 思路
根据题目的意思,很容易想到将所有的路径全部求出,然后将所有的路径转化为数字进行累加,最终得到结果。这里求出所有的路径可以使用前序遍历算法,同时使用一个stringBulider对象保存每一层的数字,离开这层时,将这层的数字进行删除。代码见下 - 代码(c#)
public int SumNumbers(TreeNode root)
{
StringBuilder sb = new StringBuilder();
List<int> path = new List<int>();
GetPath(root, sb, path);//使用前序遍历获取所有的路径
return path.Sum();//将所有的路径进行累加求和
}
public void GetPath(TreeNode root, StringBuilder sb, List<int> path)
{
if (root == null) return;
sb.Append(root.val);
if (root.left == null&&root.right==null)//这个节点是叶子节点
{
if (sb.Length > 0)
{
path.Add(int.Parse(sb.ToString()));//得到一条路径
}
sb.Remove(sb.Length - 1,1);//移除该层的数字
return;
}
GetPath(root.left, sb, path);
GetPath(root.right, sb, path);
sb.Remove(sb.Length - 1, 1);//移除该层的数字
}