美文网首页
LeetCode 297. 二叉树的序列化与反序列化

LeetCode 297. 二叉树的序列化与反序列化

作者: 陈陈chen | 来源:发表于2021-09-16 15:16 被阅读0次

    1、题目

    image.png

    2、分析

    序列化:直接使用前序遍历,遇到null的,用特殊字符代替。返回拼接后的字符串
    反序列化:利用递归的方法,遇到特殊字符,结束递归返回null即可(反序列化就是构造二叉树,涉及到构造二叉树的话,首先考虑找到根节点)

    3、代码

    以下代码用StringBuilder代替String直接拼接,会省很多时间。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Codec {
        String SPE = ",";
        String NULL = "#";
        // Encodes a tree to a single string.
        public String serialize(TreeNode root) {
            if(root == null) return NULL;
            String val = String.valueOf(root.val);
            String left = serialize(root.left);
            String right = serialize(root.right);
            String subStr = val + SPE + left + SPE + right;
            return subStr;
        }
    
        // Decodes your encoded data to tree.
        public TreeNode deserialize(String data) {
            String[] nodes = data.split(SPE);
            LinkedList<String> nodeList = new LinkedList<String>();
            for(String s: nodes){
                nodeList.add(s);
            }
            return deserialize(nodeList);
        }
    
        private TreeNode deserialize(LinkedList<String> nodeList){
            if(nodeList.isEmpty()) return null; 
            String str = nodeList.removeFirst();
            if(str.equals(NULL)){
                return null;
            }
            TreeNode node = new TreeNode(Integer.valueOf(str).intValue());
            node.left = deserialize(nodeList);
            node.right = deserialize(nodeList);
            return node;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode 297. 二叉树的序列化与反序列化

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