1. 程式人生 > >劍指offer-----序列化和反序列化二叉樹(java版)

劍指offer-----序列化和反序列化二叉樹(java版)

一 題目

請實現兩個函式,分別用來序列化和反序列化二叉樹

二 思路

序列化二叉樹時,根據前序遍歷方式將二叉樹節點的值轉換為字串,如果二叉樹節點為空,則以‘#’代替,每個節點的值以‘,’分隔,反序列化時,也以前序遍歷方式從佇列中取出數值構建二叉樹

三 程式原始碼

String Serialize(TreeNode root) {
        if (root==null)
            return "#,";
        StringBuilder sb = new StringBuilder(root.val + ",");
        sb.append(Serialize(root.left));
        sb.append(Serialize(root.right));
        return sb.toString();
    }

    TreeNode Deserialize(String str) {
        String[] strs = str.split(",");
        Queue<String> q = new LinkedList<>();
        for (int i=0;i<strs.length;i++){
            q.add(strs[i]);
        }
        return PreOrder(q);
    }

    TreeNode PreOrder(Queue<String> q){
        String val = q.poll();
        if (val.equals("#"))
            return null;
        TreeNode node = new TreeNode(Integer.valueOf(val));
        node.left = PreOrder(q);
        node.right = PreOrder(q);
        return node;
    }