美文网首页
331. Verify Preorder Serializati

331. Verify Preorder Serializati

作者: FlynnLWang | 来源:发表于2016-12-30 07:50 被阅读0次

Question

One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, we record the node's value. If it is a null node, we record using a sentinel value such as #.

Paste_Image.png
the above binary tree can be serialized to the string "9,3,4,#,#,1,#,#,2,#,6,#,#", where # represents a null node.
Given a string of comma separated values, verify whether it is a correct preorder traversal serialization of a binary tree. Find an algorithm without reconstructing the tree.
Each comma separated value in the string must be either an integer or a character '#' representing null pointer.
You may assume that the input format is always valid, for example it could never contain two consecutive commas such as "1,,3".
Example 1:
"9,3,4,#,#,1,#,#,2,#,6,#,#"
Return true
Example 2:
"1,#"
Return false
Example 3:
"9,#,#,1"
Return false

Code

public class Solution {
    public boolean isValidSerialization(String preorder) {
        if (preorder == null || preorder.length() == 0) return false;
        
        String[] nodes = preorder.split(",");
        if (nodes[0].equals("#")) {
            if (nodes.length == 1) return true;
            return false;
        }
        
        List<String> stack = new LinkedList<>();
        for (int i = 0 ; i < nodes.length; i++) {
            stack.add(nodes[i]);
            while (stack.size() >= 3 && stack.get(stack.size() - 1).equals("#") && stack.get(stack.size() - 2).equals("#") && !stack.get(stack.size() - 3).equals("#")) {
                    stack.remove(stack.size() - 1);
                    stack.remove(stack.size() - 1);
                    stack.remove(stack.size() - 1);
                    stack.add("#");
                }
        }
        
        return stack.size() == 1 && stack.get(0).equals("#");
    }
}

Solution

We can keep removing the leaf node until there is no one to remove. If a sequence is like "4 # #", change it to "#" and continue. We need a stack so that we can record previous removed nodes.
Here is an example:

Paste_Image.png

相关文章

网友评论

      本文标题:331. Verify Preorder Serializati

      本文链接:https://www.haomeiwen.com/subject/ssxmvttx.html