剑指offer系列之六十:序列化二叉树

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

首先得理解题目的意思,序列化就是返回一个带有#和逗号的字符串。反序列化就是根据带有#和逗号的字符串返回一棵二叉树。比如对于二叉树

   1
  / \
 2    3
 /\    /\
4  5   6  7

来讲,序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。而反序列化的结果则是输出一棵二叉树。

下面是具体的实现代码(已被牛客AC):

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


    int p = -1;
    TreeNode Deserialize(String str) {
        p++;
        if (p >= str.length())
            return null;
        TreeNode node = null;
        String[] strArray = str.split(",");
        if (!strArray[p].equals("#")) {
            node = new TreeNode(Integer.valueOf(strArray[p]));
            node.left = Deserialize(str);
            node.right = Deserialize(str);
        }
        return node;
    }

你可能感兴趣的:(剑指offer)