public int sumNumbers(TreeNode root) {
if(root == null){
return 0;
}
return dfs(root, 0);
}
private int dfs(TreeNode root, int preSum) {
if(root == null){
return 0;
}
int sum = preSum * 10 + root.val;
if(root.left == null && root.right == null){
return sum;
}else {
return dfs(root.left, sum) + dfs(root.right, sum);
}
}
class Solution {
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
int sum = 0;
Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
Queue<Integer> numQueue = new LinkedList<Integer>();
nodeQueue.offer(root);
numQueue.offer(root.val);
while (!nodeQueue.isEmpty()) {
TreeNode node = nodeQueue.poll();
int num = numQueue.poll();
TreeNode left = node.left, right = node.right;
if (left == null && right == null) {
sum += num;
} else {
if (left != null) {
nodeQueue.offer(left);
numQueue.offer(num * 10 + left.val);
}
if (right != null) {
nodeQueue.offer(right);
numQueue.offer(num * 10 + right.val);
}
}
}
return sum;
}
}
public boolean hasPathSum(TreeNode root, int targetSum) {
if(root == null){
return false;
}
return dfs(root, targetSum);
}
private boolean dfs(TreeNode root, int targetSum) {
if(root == null){
return false;
}
targetSum -= root.val;
if(root.left == null && root.right == null && targetSum == 0){
return true;
}
return dfs(root.left, targetSum) ||dfs(root.right, targetSum);
}
class Solution {
List<List<Integer>> res = new ArrayList<>();
LinkedList<Integer> queue = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
if(root == null){
return res;
}
dfs(root, targetSum);
return res;
}
private void dfs(TreeNode root, int targetSum) {
targetSum -= root.val;
queue.add(root.val);
if(root.left == null && root.right == null && targetSum == 0){
res.add(new ArrayList<>(queue));
return;
}
if(root.left != null){
dfs(root.left, targetSum);
queue.removeLast();
}
if(root.right != null){
dfs(root.right, targetSum);
queue.removeLast();
}
}
}