美文网首页
2022-02-01 048 序列化和反序列化

2022-02-01 048 序列化和反序列化

作者: 16孙一凡通工 | 来源:发表于2022-02-01 21:06 被阅读0次

java版本:

public class Codec {
    
   int i=0;
   int n;
    // Encodes a tree to a single string.
    StringBuffer str=new StringBuffer("");
     ArrayDeque<TreeNode> queue=new ArrayDeque<>();
    // 层次遍历这个树
    public String serialize(TreeNode root) {

    //    queue.push(root);
    //    int size=queue.size();
    //   while(!queue.isEmpty()){
    //        size=queue.size();
    //       for(int i=0;i<size;i++){
    //        TreeNode node=queue.poll();
    //        str.append(Integer.toString(node.val));
    //         str.append(",");
            
    //        if(node.left!=null){
    //           queue.offerLast(node.left);
    //        }
          
    //       if(node.right!=null){
    //           queue.offerLast(node.right);
    //       }
    //       }

    //   }
    //  str.deleteCharAt(str.length()-1);
    return rserialize(root,"");
      
      
        
    }
public String rserialize(TreeNode root,String str){
    //  if(root==null){
    //       str.append("null,");
    //    }else{
    //    str.append(Integer.toString(root.val));
    //       str.append(",");
    //    }
         
    //    serialize(root.left);
    //    serialize(root.right);
     if (root == null) {
            str += "None,";
        } else {
            str += str.valueOf(root.val) + ",";
            str = rserialize(root.left, str);
            str = rserialize(root.right, str);
        }
        return str;


}

     



    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
    
        // String[] arr=data.split(",");
    //     第一版本
        // n=arr.length;
        
        // TreeNode root=new TreeNode();
        //  root.val=Integer.parseInt(arr[0]);
        //    i++;
        
        //   BFS(root,arr);
        //  return root;
         String[] dataArray = data.split(",");
        List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
        return rdeserialize(dataList);
       
    }
     public TreeNode rdeserialize(List<String> dataList) {
        if (dataList.get(0).equals("None")) {
            dataList.remove(0);
            return null;
        }
  
        TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
        dataList.remove(0);
        root.left = rdeserialize(dataList);
        root.right = rdeserialize(dataList);
    
        return root;
    }




    // public TreeNode BFS( TreeNode root,String[] arr){

    //     TreeNode left=new TreeNode();
    //     TreeNode right=new TreeNode();
        
    //         if(i<n && arr[i]!="null" ){
    //             left=new TreeNode();
    //             left.val=Integer.parseInt(arr[i]);
    //             root.left=left;
    //         }else{
    //             // root.left=null;
    //         }
    //          i++;
    //          if(i<n && arr[i]!="null"){
    //             right=new TreeNode();
    //             right.val=Integer.parseInt(arr[i]);
    //             root.right=right;
    //         }else{
    //             // root.right=null;
    //         }
    //         i++;
    //         if(root.left!=null){
    //           BFS(root.left,arr);
    //         }
    //          if(root.right!=null){
    //          BFS(root.right,arr);

    //          }
        
    //     return root;
    // }
}

// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));

相关文章

网友评论

      本文标题:2022-02-01 048 序列化和反序列化

      本文链接:https://www.haomeiwen.com/subject/mgclkrtx.html