力扣打卡:剑指 Offer II 049. 从根节点到叶节点的路径数字之和
解题思路
抓住题目所给条件,只有左右子节点为空才是叶子节点,那么在加入时就注意
- 使用
StringBuilder
作为参数进行传递,对经过的节点进行保存 root==null
root.left==null && root.right==null
- 需要注意的点
- 注意当前节点尝试使用后,应该在
StringBuilder
中去除
- 注意当前节点尝试使用后,应该在
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
List<String> list;
public int sumNumbers(TreeNode root) {
this.list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
traverse(root,sb);
int sum = 0;
for (String s : list)
sum += Integer.parseInt("".equals(s) ? "0" : s);
return sum;
}
public void traverse(TreeNode root, StringBuilder sb) {
if(root==null) return ;
if (root.left==null && root.right==null) {
sb.append(root.val); // 增加当前的val
this.list.add(sb.toString());
sb.delete(sb.length() - 1, sb.length()); // 删除最后一位,因为给定的是0-9
return;
} // basecase
sb.append(root.val); // 增加当前的val
traverse(root.left, sb);
traverse(root.right, sb);
sb.delete(sb.length() - 1, sb.length()); // 删除最后一位,因为给定的是0-9
}
}