序列化二叉树

76 阅读1分钟

序列化二叉树

请实现两个函数,分别用来序列化和反序列化二叉树。

您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为原始树结构。
注意:

以上的格式是AcWing序列化二叉树的方式,你不必一定按照此格式,所以可以设计出一些新的构造方式。

样例
你可以序列化如下的二叉树
    8
   / \
  12  2
     / \
    6   4

为:"[8, 12, 2, null, null, 6, 4, null, null, null, null]"

队列

时间复杂度O(n)

class Solution {

    // Encodes a tree to a single string.
    String serialize(TreeNode root) {
        Queue que = new LinkedList();
        if(root == null){
            return "#!";
        }
        String res = root.val + "!";
        que.offer(root);
        while(que.peek() != null){
            TreeNode tr = (TreeNode)que.poll();
            if(tr.left != null){
                que.offer(tr.left);
                res += tr.left.val + "!";
            }else{
                res += "#!";
            }
            if(tr.right != null){
                que.offer(tr.right);
                res += tr.right.val + "!";
            }else{
                res += "#!";
            }
        }
        return res;
    }

    // Decodes your encoded data to tree.
    TreeNode deserialize(String data) {
        Queue qu = new LinkedList();
        String[] da = data.split("!");
        if("#".equals(da[0])){
            return null;
        }
        TreeNode tt = new TreeNode(Integer.parseInt(da[0]));
        TreeNode temp = tt;
        int index = 1;
        boolean flag = true;
        qu.offer(temp);
        TreeNode node = null;
        while(qu.peek() != null){
            node = (TreeNode)qu.poll();
            if(da[index].equals("#")){
                node.left = null;
            }else{
                TreeNode rr = new TreeNode(Integer.parseInt(da[index]));
                node.left = rr;
                qu.offer(node.left);
            }
            index++;
            if(da[index].equals("#")){
                node.right = null;
            }else{
                TreeNode rr = new TreeNode(Integer.parseInt(da[index]));
                node.right = rr;
                qu.offer(node.right);
            }
            index++;
        }
        return tt;
    }
}

创作打卡挑战赛

赢取流量/现金/CSDN周边激励大奖