Saturday, June 4, 2016

Verify Preorder Serialization of a Binary Tree -- Leetcode

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 #.
     _9_
    /   \
   3     2
  / \   / \
 4   1  #  6
/ \ / \   / \
# # # #   # #
For example, 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
Answer:
public boolean isValidSerialization(String preorder) {
        if(preorder==null || preorder.length()==0)return true;
        int len = preorder.length();
       //"#", return true!
        if(preorder.charAt(0)=='#')return len==1;
        int count = 1;

        String[] strArr = preorder.split(",");
        for(int i=0; i<strArr.length; i++){
            if(!strArr[i].equals("#")){
                count++;
            }else{
                count--;
                if(count == 0){
                    return i==strArr.length-1;
                }
            }
        }
        return count==0;
    }

No comments:

Post a Comment