[劍指offer][Java]序列化二叉樹

題目

請實(shí)現(xiàn)兩個函數(shù),分別用來序列化和反序列化二叉樹。

程序核心思想

序列化二叉樹的意思是選擇一種遍歷方式,把遍歷的結(jié)果寫成一個字符串,null也要寫出來,形式隨意。
這里選擇先序遍歷的方式,來到頭節(jié)點(diǎn),頭節(jié)點(diǎn)的值寫成一個字符串,整體的結(jié)果是頭結(jié)點(diǎn)的字符串加上左子樹形成的字符串加上右子樹形成的字符串,如果當(dāng)前節(jié)點(diǎn)為null,則返回字符串“null”。

反序列化的意思是給定一個字符串,然后把它還原成二叉樹。
首先要先把字符串按照一定的分隔符給分開來,把分開的小字符串存入字符串?dāng)?shù)組中。然后把依次把字符串加入隊(duì)列,然后出列一個元素,如果這個元素不為null,那么創(chuàng)造一個節(jié)點(diǎn),節(jié)點(diǎn)的值為這個元素,然后這個節(jié)點(diǎn)的左指針和右指針遞歸這個過程,如果這個元素為null,那么返回null。

Tips

代碼

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    String Serialize(TreeNode root) {
        if(root == null)    return "null,";
        String s = root.val + ",";
        return s + Serialize(root.left) + Serialize(root.right);
    }

    TreeNode Deserialize(String str) {
       String[] arr = str.split(",");
       Queue<String> queue = new LinkedList<String>();
        for(int i = 0; i < arr.length; i++){
            queue.offer(arr[i]);
        }
        return deserie(queue);
  }
    
    TreeNode deserie(Queue<String> queue){
        String s = queue.poll();
        if(s.equals("null"))    return null;
        TreeNode node = new TreeNode(Integer.valueOf(s));
        node.left = deserie(queue);
        node.right = deserie(queue);
        return node;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容