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();
    }
}

 

posted @ 2020-06-19 00:07  oldby  阅读(127)  评论(0编辑  收藏  举报