LeetCode - Serialize and Deserialize Binary Tree
Posted IncredibleThings
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode - 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. Example: You may serialize the following tree: 1 / 2 3 / 4 5 as "[1,2,3,null,null,4,5]" Clarification: The above format is the same as how LeetCode 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.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { if(root == null){ return "null"; } return root.val + "," +serialize(root.left) + ","+serialize(root.right); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if(data == null || data.length() == 0){ return null; } Queue<String> queue =new LinkedList<>(); queue.addAll(Arrays.asList(data.split(","))); //String[] nodes = data.split(","); return deserializeHelper(queue); } public TreeNode deserializeHelper(Queue<String> nodes){ String val = nodes.remove(); if (val.equals("null")) return null; else { TreeNode node = new TreeNode(Integer.valueOf(val)); node.left = deserializeHelper(nodes); node.right = deserializeHelper(nodes); return node; } } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root));
无法直接传入int因为它是primitive type, changes made to it will not be visible outside the function scope.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { if(root == null){ return "null"; } return root.val + "," +serialize(root.left) + ","+serialize(root.right); } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { if(data == null || data.length() == 0){ return null; } //Queue<String> queue =new LinkedList<>(); //queue.addAll(Arrays.asList(data.split(","))); String[] nodes = data.split(","); return deserializeHelper(nodes, new int[]{0}); } /* public TreeNode deserializeHelper(Queue<String> nodes){ String val = nodes.remove(); if (val.equals("null")) return null; else { TreeNode node = new TreeNode(Integer.valueOf(val)); node.left = deserializeHelper(nodes); node.right = deserializeHelper(nodes); return node; } } */ public TreeNode deserializeHelper(String[] nodes, int[] index){ String val = nodes[index[0]]; index[0] = index[0]+1; if(val.equals("null") ){ return null; } TreeNode node = new TreeNode(Integer.valueOf(val)); node.left = deserializeHelper(nodes,index); node.right = deserializeHelper(nodes,index); return node; } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root));
以上是关于LeetCode - Serialize and Deserialize Binary Tree的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] Serialize and Deserialize BST
LeetCode - Serialize and Deserialize BST
Leetcode 449. Serialize and Deserialize BST
[LeetCode] Serialize and Deserialize Binary Tree