剑指offer——序列化二叉树

来源:互联网 发布:编程常用语言有哪些 编辑:程序博客网 时间:2024/05/29 04:40

题目描述:

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


思路:

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

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

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


代码实现:

/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    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;    }}
0 0
原创粉丝点击