力扣打卡:129. 求根节点到叶节点数字之和
解题思路
利用深度优先对二叉树进行组合
利用StringBuilder对经过的节点进行存储
注意题目所给的条件:只有当左右子节点为空时,此时的节点才算是 叶子节点
root==null
防止空指针异常root.left==null && root.right==null
basecase,只有符合左右子节点为空,此时的组合才能加入集合- 对左右子节点依次进行组合检查
- 注意使用完一个节点后,需要将此时的节点从
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<>();
int sum = 0;
if(root==null) return 0;
traverse(root, new StringBuilder());
for(String s : list) sum += Integer.parseInt(s); // 对所有的组合进行累加
return sum;
}
public void traverse(TreeNode root, StringBuilder sb){
if(root==null) return; // 防止空指针异常
sb.append(root.val); // 添加此时的 root.val
if(root.left==null && root.right==null) { // basecase,注意题目所给的条件
list.add(sb.toString());
sb.delete(sb.length()-1,sb.length()); // 在完成增加后,应该将此时的root.val进行删减
return ;
}
traverse(root.left, sb); // 对左边进行组合
traverse(root.right, sb); // 对右边进行组合
sb.delete(sb.length()-1, sb.length()); // 将此时的root.val进行删减
}
}