题目描述
解决思路:利用两个栈,一个储存节点,一个储存从根节点到该子节点的路径之和,最后判断是否到叶子节点,如果到则与总和相加,否则继续加入左右子节点。
解决代码:
/**
* 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 {
public int sumNumbers(TreeNode root) {
if(root == null){
return 0;
}
int sum = 0;
Deque<TreeNode> deque1 = new LinkedList<>();
Deque<Integer> deque2 = new LinkedList<>();
deque1.offerFirst(root);
deque2.offerFirst(root.val);
while(!deque1.isEmpty()){
TreeNode cur = deque1.pollFirst();
int val = deque2.pollFirst();
if(cur.left == null && cur.right == null){
sum += val;
}else{
if(cur.left != null){
deque1.offerFirst(cur.left);
deque2.offerFirst(val * 10 + cur.left.val);
}
if(cur.right != null){
deque1.offerFirst(cur.right);
deque2.offerFirst(val * 10 + cur.right.val);
}
}
}
return sum;
}
}