• 297. Serialize and Deserialize Binary Tree


    题目:

    Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

    Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.

    For example, you may serialize the following tree

        1
       / 
      2   3
         / 
        4   5
    

    as "[1,2,3,null,null,4,5]", just the same as how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.

    Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.

    链接: http://leetcode.com/problems/serialize-and-deserialize-binary-tree/

    5/14/2017

    算法班,deserialize部分抄的

    层序遍历的方法

    注意

    1. 第36行需要减去最后一个","

    2. 第44行将string里面的各个char转为数字和#

    3. deserialize部分,TreeNode部分来自于queue,新建的子树node值来自于values

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Codec {
    11     private final String nullNode = "#";
    12     private final String delimiter = ",";
    13     
    14     // Encodes a tree to a single string.
    15     public String serialize(TreeNode root) {
    16         StringBuilder sb = new StringBuilder();
    17         if (root == null) return "#";
    18 
    19         Queue<TreeNode> queue = new LinkedList<TreeNode>();
    20         sb.append("[");
    21         queue.offer(root);
    22         while (!queue.isEmpty()) {
    23             int size = queue.size();
    24             for (int i = 0; i < size; i++) {
    25                 TreeNode node = queue.poll();
    26                 if (node == null) {
    27                     sb.append(nullNode);
    28                 } else {
    29                     sb.append(node.val);
    30                     queue.offer(node.left);
    31                     queue.offer(node.right);
    32                 }
    33                 sb.append(delimiter);
    34             }
    35         }
    36         sb.deleteCharAt(sb.length() - 1);
    37         sb.append("]");
    38         return sb.toString();
    39     }
    40 
    41     // Decodes your encoded data to tree.
    42     public TreeNode deserialize(String data) {
    43         if (data.equals("#")) return null;
    44         String[] values = data.substring(1, data.length() - 1).split(delimiter);
    45         Queue<TreeNode> queue = new LinkedList<TreeNode>();
    46         TreeNode root = new TreeNode(Integer.parseInt(values[0]));
    47         
    48         queue.offer(root);
    49         for (int i = 1; i < values.length; i++) {
    50             // node comes from queue, left/right comes from values
    51             TreeNode parent = queue.poll();
    52             if (!values[i].equals(nullNode)) {
    53                 TreeNode left = new TreeNode(Integer.parseInt(values[i]));
    54                 parent.left = left;
    55                 queue.add(left);
    56             }
    57             i++;
    58             if (!values[i].equals(nullNode)) {
    59                 TreeNode right = new TreeNode(Integer.parseInt(values[i]));
    60                 parent.right = right;
    61                 queue.add(right);
    62             }
    63         }
    64         return root;
    65     }
    66 }
    67 
    68 // Your Codec object will be instantiated and called as such:
    69 // Codec codec = new Codec();
    70 // codec.deserialize(codec.serialize(root));

    也可以递归调用

    http://www.cnblogs.com/yrbbest/p/5047035.html

    别人的答案

    https://discuss.leetcode.com/topic/30195/recursive-dfs-iterative-dfs-and-bfs

    更多讨论

    https://discuss.leetcode.com/category/375/serialize-and-deserialize-binary-tree

  • 相关阅读:
    react的路由以及传值方法
    三连击
    给网页添加鼠标样式
    单词统计(续)
    个人课程总结
    构建之法阅读笔记02
    构建之法阅读笔记01
    第十六周总结
    计算最长英语单词链
    第十五周总结
  • 原文地址:https://www.cnblogs.com/panini/p/6854567.html
Copyright © 2020-2023  润新知