劍指Offer之序列化二叉樹

題目描述:

題目: 請實現兩個函數,分別用來序列化和反序列化二叉樹。
在這裏插入圖片描述
序列化: 將所給二叉樹轉化爲字符串;反序列化:將字符串轉化爲二叉樹


思路分析:

序列化時,可以採用BFS來遍歷,運用輔助隊列來進行層次遍歷。反序列化要先構造結點,然後也是BFS進行操作。

參考代碼:

 //序列化二叉樹
 public String serialize(TreeNode root) { 
    if(root == null)return "[]";
    StringBuilder res = new StringBuilder("");
    LinkedList<TreeNode> queue = new LinkedList<>();
    queue.addLast(root);
    while(!queue.isEmpty()){
       TreeNode node = queue.removeFirst();
       if(node != null){
         res.append(node.val + ",");
         queue.add(node.left);
         queue.add(node.right);
       }
       else res.append("null,");
    }
    return res.toString().substring(0, res.length() - 1);
 }
//反序列化二叉樹
 public TreeNode deserialize(String data) {
   if(data == null || data.length() == 0 || data.equals("[]"))return null;
   String[] values = data.split(",");
   TreeNode root = new TreeNode(Integer.parseInt(values[0]));
   LinkedList<TreeNode> queue = new LinkedList<>();
   queue.addLast(root);
   int i = 1;
   while(!queue.isEmpty()){
     TreeNode node = queue.removeFirst();//這裏是removeFirst,從頭部刪除
     if(i < data.length() && !values[i].equals("null")){
        node.left = new TreeNode(Integer.parseInt(values[i]));
        queue.addLast(node.left);
     }
     i++;
     if(i < data.length() && !values[i].equals("null")){
        node.right = new TreeNode(Integer.parseInt(values[i]));
        queue.addLast(node.right);
     }
     i++;
   }
   return root;
 }

總結:

練習的多了,就感覺這道題不是很難,但是還是得注意一些細微的地方:String.length()別忘帶括號;String.substring()別寫成subString,注意大小寫;從頭部刪除還是從尾部刪除。


(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章