题目描述
题目分析
这道题其实就是在树遍历的基础上进行了一点点运算而已,因此我们选取合适的遍历方式,并且在遍历过程中进行计算就可以了。
遍历方法我更倾向于使用前序遍历,因为我的算法思想如下:每遍历到一个节点,将这个节点的值乘以十,加到自己的左右孩子结点上去。
这里我使用的数据结构是栈。
代码
import java.util.Stack;
public class sumNumbers129 {
public int sumNumbers(TreeNode root) {
int sum = 0;
if (root == null){
return sum;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()){
TreeNode node = stack.pop();
//声明一个新的节点,用来为将要入栈的孩子结点重新赋值
TreeNode tmpnode = node;
if (node.right != null){
tmpnode = node.right;
tmpnode.val += node.val*10;
stack.push(tmpnode);
}
if (node.left != null){
tmpnode = node.left;
tmpnode.val += node.val*10;
stack.push(tmpnode);
}
if (node.left ==null && node.right == null){
sum += node.val;
}
}
return sum;
}
}