Untitled

 avatar
unknown
plain_text
a month ago
1.7 kB
2
Indexable
import java.util.*;

public class Codec {
    // Serialize the tree using Preorder Traversal
    public String serialize(TreeNode root) {
        StringBuilder sb = new StringBuilder();
        serializeHelper(root, sb);
        return sb.toString();
    }

    private void serializeHelper(TreeNode node, StringBuilder sb) {
        if (node == null) {
            sb.append("null,"); // Append "null" for empty nodes
            return;
        }
        sb.append(node.val).append(","); // Append the node's value
        serializeHelper(node.left, sb);  // Serialize left subtree
        serializeHelper(node.right, sb); // Serialize right subtree
    }

    // Deserialize the tree from Preorder Traversal
    public TreeNode deserialize(String data) {
        if (data == null || data.isEmpty()) {
            return null;
        }
        // Split the string into tokens
        Queue<String> nodes = new LinkedList<>(Arrays.asList(data.split(",")));
        return deserializeHelper(nodes);
    }

    private TreeNode deserializeHelper(Queue<String> nodes) {
        String value = nodes.poll(); // Get the next value
        if (value.equals("null")) {
            return null; // Return null for empty nodes
        }
        TreeNode node = new TreeNode(Integer.parseInt(value)); // Create a new TreeNode
        node.left = deserializeHelper(nodes);  // Reconstruct left subtree
        node.right = deserializeHelper(nodes); // Reconstruct right subtree
        return node;
    }
}

// TreeNode definition
class TreeNode {
    int val;
    TreeNode left, right;
    TreeNode(int val) {
        this.val = val;
    }
}
Leave a Comment