题目
思路
核心:非递归中序遍历,达到每一条从根节点到叶子节点的路径
非递归中序遍历核心:用栈来实现
答案
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int sumNumbers (TreeNode root) {
/*
核心:非递归中序遍历,达到每一条从根节点到叶子节点的路径
非递归中序遍历核心:用栈来实现
*/
TreeNode cur = root;
List<Integer> numbers = new ArrayList<>();
List<Integer> path = new ArrayList<>();
TreeNode pre = null;
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty() || cur != null) {
while (cur != null) {
path.add(cur.val);
stack.add(cur);
cur = cur.left;
}
cur = stack.peek();
if (cur.left == null &&
cur.right == null) { //到叶子节点了,行成一条路径了
String str = "";
for (int v : path) {
str += v + "";
}
numbers.add(Integer.valueOf(str));
}
if (cur.right == null || cur.right == pre) {
TreeNode pop = stack.pop();
path.remove(path.size() - 1);
pre = cur;
cur = null;
} else {
cur = cur.right;
}
}
int ans = 0;
for (int v : numbers) {
ans += v;
}
return ans;
}
}