美文网首页
二叉树序列化与反序列化

二叉树序列化与反序列化

作者: shiguangfeixu | 来源:发表于2021-03-15 23:39 被阅读0次

    Algorithm

    449. Serialize and Deserialize BST

    Description

    Serialization is 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 search tree. There is no restriction on how your serialization/deserialization algorithm should work. You need to ensure that a binary search tree can be serialized to a string, and this string can be deserialized to the original tree structure.

    The encoded string should be as compact as possible.

    Example 1:

    Input: root = [2,1,3]
    Output: [2,1,3]
    

    Example 2:

    Input: root = []
    Output: []
    

    Constraints:

    • The number of nodes in the tree is in the range [0, 104].
    • 0 <= Node.val <= 104
    • The input tree is guaranteed to be a binary search tree.

    Solution

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Codec {
    
        private int index = 0;
    
        // Encodes a tree to a single string.
        public String serialize(TreeNode root) {
            StringBuilder res = new StringBuilder();
            dfs(root, res);
            return res.toString();
        }
    
        private void dfs(TreeNode root, StringBuilder res){
            if(root == null){
                res.append("null").append(' ');
                return;
            }
            res.append(root.val).append(' ');
            dfs(root.left, res);
            dfs(root.right, res);
        }
    
        // Decodes your encoded data to tree.
        public TreeNode deserialize(String data) {
            String[] arr = data.split(" ");
            index = 0;
            return build(arr);
        }
    
        public TreeNode build(String[] arr) {
            if(arr[index].equals("null")) {
                index++;
                return null;
            }
            
            TreeNode root = new TreeNode(Integer.parseInt(arr[index]));
            index++;
            root.left = build(arr);
            root.right = build(arr);
    
            return root;
        }
    }
    
    // Your Codec object will be instantiated and called as such:
    // Codec ser = new Codec();
    // Codec deser = new Codec();
    // String tree = ser.serialize(root);
    // TreeNode ans = deser.deserialize(tree);
    // return ans;
    

    相关文章

      网友评论

          本文标题:二叉树序列化与反序列化

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