LeetCode297. Sérialisation et désérialisation de l'arbre binaire

sujet

La sérialisation est l'opération de conversion d'une structure de données ou d'un objet en bits continus, puis les données converties peuvent être stockées dans un fichier ou une mémoire, et elles peuvent également être transmises à un autre environnement informatique via le réseau et reconstruites de la manière opposée. Obtenez les données originales.
Veuillez concevoir un algorithme pour réaliser la sérialisation et la désérialisation de l'arbre binaire. Il n'y a pas de limite à la logique d'exécution de votre algorithme de séquence / désérialisation, il vous suffit de vous assurer qu'un arbre binaire peut être sérialisé en une chaîne et de désérialiser cette chaîne dans l'arborescence d'origine. lien

Idées

Pour les applications en largeur d'abord, il vous suffit d'ajouter des séparateurs lors du stockage des chaînes.

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Codec {
    
    

    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
    
    
        StringBuilder sb= new StringBuilder();
        Queue<TreeNode>queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
    
    
            TreeNode t = queue.poll();
            if(t != null){
    
    
                sb.append(t.val + ",");
                queue.offer(t.left);
                queue.offer(t.right);
            }else{
    
    
                sb.append("null,");
            }
        }
        return sb.toString();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
    
    
        String[]node = data.split(",");
        TreeNode root = null;
        if(node.length>0){
    
    
            root = getNode(node[0]);
            int idx = 1;
            Queue<TreeNode>queue = new LinkedList<>();
            queue.offer(root);
            while(idx<node.length){
    
    
                TreeNode t = queue.poll();
                if(t != null){
    
    
                    t.left = getNode(node[idx++]);
                    t.right = getNode(node[idx++]);
                    queue.offer(t.left);
                    queue.offer(t.right);
                }
            }    
        }
        return root;
    }

    TreeNode getNode(String s){
    
    
        if(s.equals("null")){
    
    
            return null;
        }else{
    
    
            return new TreeNode(Integer.valueOf(s));
        }
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_42007742/article/details/106782302
conseillé
Classement