首页 > 其他 > 详细

297. 二叉树的序列化与反序列化

时间:2019-08-16 16:25:06      阅读:88      评论:0      收藏:0      [点我收藏+]

技术分享图片

public class Codec { // 这个数不只是个位数 还可能是负数等等 不单纯把他看作个位数 或者整数
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        StringBuffer sbf = new StringBuffer("");
        dfs1(root, sbf);
        return sbf.toString();
    }

    public void dfs1(TreeNode root, StringBuffer sbf) {
        if (root == null) {
            sbf.append("#,");
            return;
        }
        sbf.append(root.val + ",");
        dfs1(root.left, sbf);
        dfs1(root.right, sbf);
    }

    public TreeNode deserialize(String data) {

        StringBuilder builder = new StringBuilder(data);
        return deserial(builder);

    }

    private TreeNode deserial(StringBuilder data) {
        int index = data.indexOf(",");          // index存储第一个逗号出现的索引值
        String current = "";                    // current存储当前要够构造的节点的val值
        if (index == -1) {                      // index为-1,说明不存在逗号,针对此对data作切割
            index = data.length();
            current = data.toString();
            data = data.delete(0, index);
        } else {                                // index为-1,说明存在逗号,针对此对data作切割
            current = data.substring(0, index);
            data = data.delete(0, index + 1);
        }

        if (current.length() > 0 && !current.equals("#")) {     // 存在值,可以构建节点
            TreeNode root = new TreeNode(Integer.parseInt(current));
            root.left = deserial(data);
            root.right = deserial(data);
            return root;
        } else {                                    // 不存在值,返回null
            return null;
        }

    }
}

java与c++不同,java只存在值传递,不存在引用传递,不存在指针,所以,完全照搬c++用指针的方式(剑指offer第37题)来做是不行的,需要做变通。所以,在此我尝试用StringBuilder(不能直接用String,因为String是不可变对象,是被final修饰的,每次对String修改,都会创建一个新的String)来解决,也可以尝试用List,String[]数组等方式,不过需要考虑索引的问题。具体看代码注释

297. 二叉树的序列化与反序列化

原文:https://www.cnblogs.com/cznczai/p/11364367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!