反序列化二叉树-队列

package Leetcode;

import java.util.LinkedList;
import java.util.Queue;

//请实现两个函数,分别用来序列化和反序列化二叉树。
public class test37 {
    public static void main(String[] args) {
        TreeNode t=new TreeNode(1);
        t.left=new TreeNode(2);
        t.right=new TreeNode(3);
        t.right.left=new TreeNode(4);
        t.right.right=new TreeNode(5);
        String s=serialize(t);
        TreeNode tr=deserialize(s);
        int x=0;
    }
        // Encodes a tree to a single string.
    public static String serialize(TreeNode root) {
        if(root==null){
            return "[]";
        }
        String s="";
        Queue<TreeNode> q=new LinkedList<>();
        q.offer(root);
        s=s+"[";
        while(!q.isEmpty()){
            TreeNode t=q.poll();
            if(t!=null){
                s=s+t.val+",";
                q.offer(t.left);
                q.offer(t.right);
            }else{
                s=s+"null,";
            }

        }
        s=s.substring(0,s.length()-1);
        s=s+"]";
        return s;
    }

    // Decodes your encoded data to tree.
    public static TreeNode deserialize(String data) {
        if(data.equals("[]")){
            return null;
        }
        String []s=data.substring(1, data.length()-1).split(",");
        TreeNode root=new TreeNode(Integer.parseInt(s[0]));
        Queue<TreeNode> q=new LinkedList<>();
        q.offer(root);
        int i=1;
        while(!q.isEmpty()){
            TreeNode tr=q.poll();
            if(!s[i].equals("null")){
                tr.left=new TreeNode(Integer.parseInt(s[i]));
                q.offer(tr.left);
            }
            i++;
            if(!s[i].equals("null")){
                tr.right=new TreeNode(Integer.parseInt(s[i]));
                q.offer(tr.right);
            }
            i++;
        }
        return root;
        
    }

}
原文地址:https://www.cnblogs.com/jieyi/p/14236814.html