63.序列化二叉树

题目描述:

  实现两个函数。分别用来序列化和反序列化二叉树

思路分析:

  序列化指的就是,将二叉树转化为字符串序列,反序列化指的就是将字符串转化为二叉树。我们可以用先序遍历将二叉树转化为字符串,遇见节点为空记做 #!,不为空记做 num!。同样的我们可以用先序遍历的方法重建二叉树。

代码:

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    String Serialize(TreeNode root) {
        if(root==null)
            return "#!";
        String res="";
        res=res+root.val+"!";
        res=res+Serialize(root.left);
        res=res+Serialize(root.right);
        return res;
  }
    public TreeNode Deserialize(String str){
        Queue<String>q=new LinkedList<>();
        String []s=str.split("!");
        for(int i=0;i<s.length;i++){
            q.offer(s[i]);
        }
        return reconstructTree(q);
    }
    public TreeNode reconstructTree(Queue<String>q) {
        String s=q.poll();
        if(s.equals("#"))
            return null;
        TreeNode pRoot=new TreeNode(Integer.valueOf(s));
        pRoot.left=reconstructTree(q);
        pRoot.right=reconstructTree(q);
        return pRoot;
  }
}
posted @ 2019-06-01 22:38  yjxyy  阅读(125)  评论(0编辑  收藏  举报