1. 程式人生 > >劍指offer(64):序列化二叉樹

劍指offer(64):序列化二叉樹

題目描述

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

分析

如果二叉樹的序列化是從根節點開始,那麼對應的而反序列化也是從根節點開始的。因此可以使用二叉樹的前序遍歷來序列化二叉樹,當前序遍歷碰到null值是,使用“#”表示,每一個節點的數值之間用“,”隔開。

牛客AC:

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

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

    }

}
*/
public class Solution { public int index = -1; // 節點在序列中的索引 /** * 序列化 * 前序遍歷,將二叉樹節點的值轉為字元序列,null轉為“#” * * @param root * @return */ String Serialize(TreeNode root) { StringBuffer s = new StringBuffer(); if (root == null) { s.append("#,"
); return s.toString(); } s.append(root.val + ","); s.append(Serialize(root.left)); s.append(Serialize(root.right)); return s.toString(); } /** * 反序列化 * * @param str * @return */ TreeNode Deserialize(String str) { index++; int
length = str.length(); if (index >= length) { return null; } String[] nodeSeq = str.split(","); TreeNode pNode = null; if (!nodeSeq[index].equals("#")) { pNode = new TreeNode(Integer.valueOf(nodeSeq[index])); pNode.left = Deserialize(str); pNode.right = Deserialize(str); } return pNode; } }

參考
1. 何海濤,劍指offer名企面試官精講典型程式設計題(紀念版),電子工業出版社