import java.util.*;

/*

  • public class TreeNode {
  • int val = 0;
  • TreeNode left = null;
  • TreeNode right = null;
  • } */

public class Solution { /** * * @param root TreeNode类 * @return int整型 / public int sumNumbers(TreeNode root) { //如果根节点是空,直接返回0即可 if (root == null) return 0; //两个栈,一个存储的是节点,一个存储的是节点对应的值 Stack nodeStack = new Stack<>(); Stack valueStack = new Stack<>(); //全局的,统计所有路径的和 int res = 0; nodeStack.add(root); valueStack.add(root.val); while (!nodeStack.isEmpty()) { //当前节点和当前节点的值同时出栈 TreeNode node = nodeStack.pop(); int value = valueStack.pop(); if (node.left == null && node.right == null) { //如果当前节点是叶子结点,说明找到了一条路径,把这条 //路径的值加入到全局变量res中 res += value; } else { //如果不是叶子节点就执行下面的操作 if (node.right != null) { //把子节点和子节点的值分别加入到栈中,这里子节点的值 //就是父节点的值10+当前节点的值 nodeStack.push(node.right); valueStack.push(value * 10 + node.right.val); } if (node.left != null) { nodeStack.push(node.left); valueStack.push(value * 10 + node.left.val); } } } return res;

}

}