331. Verify Preorder Serialization of a Binary Tree
One way to serialize a binary tree is to use preorder 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 ‘#’.
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 preorder, return true if it is a correct preorder traversal serialization of a binary tree.
It is guaranteed that 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”.
Note: You are not allowed to reconstruct the tree.
Example 1:
Input: preorder = “9,3,4,#,#,1,#,#,2,#,6,#,#”
Output: true
Example 2:
Input: preorder = “1,#”
Output: false
Example 3:
Input: preorder = “9,#,#,1”
Output: false
Constraints:
- 1 < = p r e o r d e r . l e n g t h < = 1 0 4 1 <= preorder.length <= 10^4 1<=preorder.length<=104
- preorder consist of integers in the range [0, 100] and ‘#’ separated by commas ‘,’.
From: LeetCode
Link: 331. Verify Preorder Serialization of a Binary Tree
Solution:
Ideas:
- Handling Digits: The code skips over a sequence of digits when it encounters a non-null node.
- Slot Calculation: After processing a node, the slots are updated correctly, ensuring that the tree structure is valid.
Code:
bool isValidSerialization(char* preorder) {
int slots = 1; // initially one slot for the root
for (int i = 0; preorder[i] != '\0'; ) {
if (slots == 0) {
return false;
}
if (preorder[i] == ',') {
i++;
continue;
}
if (preorder[i] == '#') {
// Consume one slot
slots--;
i++;
} else {
// If it's a number, consume one slot but add two new slots
while (preorder[i] != ',' && preorder[i] != '\0') {
i++;
}
slots++; // Consuming one and adding two is a net increase of one slot
}
}
// All slots should be used up if it's a valid serialization
return slots == 0;
}