二叉树 序列化与反序列化

序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。

实现二叉树的序列化与反序列化

思路:

  • 前序遍历过程中,每遇到一个节点,将值加入字符串中,以“,”分隔,遇到空节点,以“#” 标识
  • 反序列化过程,每遇到一个节点,前序构造二叉树

(关键点:以#表示空节点,因为单靠前序序列无法重构二叉树)

public class Solution {
    private int index=-1;//递归下标
    
    
    String Serialize(TreeNode root) {
        StringBuilder sb=new StringBuilder();
        if(root==null)
        {
            sb.append("#,");
            return sb.toString();
        }
        sb.append(root.val+","); //Java中基本类型int与字符串相加进行拼接操作
        sb.append(Serialize(root.left));
        sb.append(Serialize(root.right));
        return sb.toString();
        
        
        
        
  }
    TreeNode Deserialize(String str) {
        index++;//当前访问的节点后移动
        String[] strr=str.split(",");
        TreeNode root=null;
        if(strr[index].equals("#"))//Java中判断值相等不用 ==  采用 equals方法
            return null;
        root=new TreeNode(Integer.valueOf(strr[index]));
        root.left=Deserialize(str);
        root.right=Deserialize(str);
        return root;
       
  }
}

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/88642910