leetcode-1028-从先序遍历还原二叉树
方法:迭代+栈 O(N)
class Solution { public TreeNode recoverFromPreorder(String S) { Deque<TreeNode> path = new LinkedList<>(); int pos = 0; while(pos < S.length()) { int level = 0; while(S.charAt(pos) == '-'){ level++; pos++; } int value = 0; while(pos<S.length() && Character.isDigit(S.charAt(pos))){ value = value * 10 + (S.charAt(pos) - '0'); ++pos; } TreeNode node = new TreeNode(value); if(level == path.size()) { if (!path.isEmpty()){ path.peek().left = node; } } else { while (level != path.size()){ path.pop(); } path.peek().right = node; } path.push(node); } while(path.size() > 1) { path.pop(); } return path.peek(); } }