Verify Preorder Serialization of a Binary Tree
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
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
Input: “9,#,#,1”
Output: false
Solution
#We just need to remember how many empty slots we have during the process.
#Initially we have one ( for the root ).
#for each node we check if we still have empty slots to put it in.
#a null node occupies one slot.
#a non-null node occupies one slot before he creates two more. the net gain is one.
class Solution:
def isValidSerialization(self, preorder: str) -> bool:
p = preorder.split(',')
slot = 1
for node in p:
if slot == 0:
return False
if node == '#':
slot -= 1
else:
slot += 1
return slot==0