Verify Preorder Serialization of a Binary Tree LeetCode Solution

Last updated on January 9th, 2025 at 02:16 am

Here, we see a Verify Preorder Serialization of a Binary Tree LeetCode Solution. This Leetcode problem is solved using different approaches in many programming languages, such as C++, Java, JavaScript, Python, etc.

List of all LeetCode Solution

Topics

Stack

Companies

Google

Level of Question

Medium

Verify Preorder Serialization of a Binary Tree LeetCode Solution

Verify Preorder Serialization of a Binary Tree LeetCode Solution

1. Problem Statement

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 ‘#’.

pre tree

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

2. Coding Pattern Used in Solution

The coding pattern used in all the provided implementations is Tree Validation using Stack or Slot Counting. The problem involves validating a preorder serialization of a binary tree, which is a unique pattern for tree-related problems.

3. Code Implementation in Different Languages

3.1 Verify Preorder Serialization of a Binary Tree C++

class Solution {
public:
    bool isValidSerialization(string preorder) {
        stack<char> stk;
        bool isNum = false;
        preorder.push_back(',');
        for(auto c: preorder){
            if(c == '#'){
                while(!stk.empty() && stk.top() == '#'){ 
                    stk.pop();
                    if(stk.empty() || stk.top() == '#') return false;
                    stk.pop();
                }
                stk.push('#');
            }else if(c == ','){
                if(isNum) stk.push('n');
                isNum = false;
            }else{
                isNum = true;
            }
        }
        return stk.size() == 1 && stk.top() == '#';
    }
};

3.2 Verify Preorder Serialization of a Binary Tree Java

class Solution {
    public boolean isValidSerialization(String preorder) {
        String[] nodes = preorder.split(",");
        int diff = 1;
        for (String node: nodes) {
            if (--diff < 0) return false;
            if (!node.equals("#")) diff += 2;
        }
        return diff == 0;
    }
}

3.3 Verify Preorder Serialization of a Binary Tree JavaScript

var isValidSerialization = function(preorder) {
    let balance = 1
    for(const node of preorder.split(','))
        if (balance > 0)
            if (node === '#') --balance
            else ++balance
        else return false
    return balance < 1
}

3.4 Verify Preorder Serialization of a Binary Tree Python

class Solution(object):
    def isValidSerialization(self, preorder):
        p = preorder.split(',')
        slot = 1
        for node in p:
            if slot == 0:
                return False
            if node == '#':
                slot -= 1
            else:
                slot += 1
        return slot==0

4. Time and Space Complexity

Time ComplexitySpace Complexity
C++O(n)O(n)
JavaO(n)O(1)
JavaScriptO(n)O(1)
PythonO(n)O(1)
  • All implementations solve the problem using the same core idea: tracking the slot balance to validate the preorder serialization.
  • The C++ implementation uses a stack, while the other implementations use a single variable for slot tracking.
  • The time complexity is O(n) for all implementations, as they iterate through the input string once.
  • The space complexity is O(n) for C++ (due to the stack) and O(1) for Java, JavaScript, and Python (due to the use of a single variable).
Scroll to Top