剑指Offer-二叉树-(13)

知识点/数据结构:二叉树

题目描述
请实现两个函数,分别用来序列化和反序列化二叉树

注意点

这些经典的数据操作一定熟记住

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
   public  String Serialize(TreeNode root) {
        if(root==null){
            //这里需要返回空的字符串!!!!!自己开始写的null
            return "";
        }
        StringBuilder sb= new StringBuilder();
        Serialize2(root,sb);
        return sb.toString();
  }
   public  void Serialize2(TreeNode root,StringBuilder sb){
        
        if(root==null){
            //一定注意!!!这里是“#,”。因为在反序列化的时候需要根据“,”来分割。
            //因为是字符串,所以可以一起放进来。
            sb.append("#,");
            return;
        }
        sb.append(root.val);
        sb.append(",");
        //这里利用递归,因为是前序遍历,所以这样递归。
        //自己调皮了一下,把left和right换了一下。2018.10.3
        Serialize2(root.left,sb);
        Serialize2(root.right,sb);
    }
    
    int index=-1;
    
  public   TreeNode Deserialize(String str) {
        //这里需要判断字符串长度是不是0
       if(str.length()==0){
           return null;
       }
       String []strs =str.split(",");
       
        return Deserialize2(strs);
  }
   public  TreeNode Deserialize2( String []strs){
        index++;   //初始值为-1,++后第一个值为str【0】
        if(!strs[index].equals("#")){
            //开始这个自己的位置放在了上边
            //这是初始化一个节点,容器
             TreeNode root=new TreeNode(0);
            root.val=Integer.parseInt(strs[index]);
            //函数的返回值是一个树的节点
            root.left=Deserialize2(strs);
            root.right=Deserialize2(strs);
            return root;
        }
        return null;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35649064/article/details/84891631