zoukankan      html  css  js  c++  java
  • LintCode 7. 二叉树的序列化和反序列化

    TreeNode

    public class TreeNode {
        public int val;
        public TreeNode left, right;
    
        public TreeNode(int val) {
            this.val = val;
            this.left = this.right = null;
        }
    }
    

    这题反序列化还是想不到

    import org.junit.Test;
    
    import java.util.LinkedList;
    
    public class Serialize {
        public LinkedList<String> split(String string) {
            LinkedList<String> linkedList = new LinkedList<>();
            String[] strings = string.split("!");
            for (String str : strings) {
                linkedList.offer(str);
            }
            return linkedList;
        }
    
        /**
         * This method will be invoked first, you should design your own algorithm
         * to serialize a binary tree which denote by a root node to a string which
         * can be easily deserialized by your own "deserialize" method later.
         */
        public String serialize(TreeNode root) {
            // write your code here
            String string = "";
            if (root == null) {
                return string + "#!";
            }
            string += root.val + "!";
            string += serialize(root.left);
            string += serialize(root.right);
            return string;
        }
    
        /**
         * This method will be invoked second, the argument data is what exactly
         * you serialized at method "serialize", that means the data is not given by
         * system, it's given by your own serialize method. So the format of data is
         * designed by yourself, and deserialize it here as you serialize it in
         * "serialize" method.
         */
        public TreeNode deserialize(String data) {
            // write your code here
            LinkedList<String> linkedList = split(data);
            return deserialize(linkedList);
        }
    
        public TreeNode deserialize(LinkedList<String> linkedList) {
            // write your code here
            TreeNode treeNode = new TreeNode(0);
            if (!linkedList.isEmpty()) {
                String str = linkedList.poll();
                if (str.equals("#")) {
                    return null;
                } else {
                    treeNode.val = Integer.parseInt(str);
                    treeNode.left = deserialize(linkedList);
                    treeNode.right = deserialize(linkedList);
                    return treeNode;
                }
            } else {
                return null;
            }
        }
    
        @Test
        public void testSerialize() {
            deserialize("1!#!2!");
        }
    }
    
  • 相关阅读:
    C++ 类 析构函数
    Oracle 11g rac 添加新节点测试
    rac添加新节点的步骤与方法
    X 传输表空间方法留待整理
    1913: 成绩评估
    1066: 输入n个数和输出调整后的n个数
    1005: 渊子赛马
    Problem Y: 哪一天,哪一秒?
    Problem T: 结构体学生信息排序
    Problem O: 国家排序
  • 原文地址:https://www.cnblogs.com/wei1/p/9582057.html
Copyright © 2011-2022 走看看