1. 程式人生 > >劍指Offer-二叉樹-(13)

劍指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;
    }
}