Serialize and Deserialize Binary Tree

来源:互联网 发布:淘宝神笔有什么作用 编辑:程序博客网 时间:2024/06/06 15:47
/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Codec {    // Encodes a tree to a single string.    public String serialize(TreeNode root) {        if (root == null) {            return null;        }        Queue<TreeNode> queue = new LinkedList<>();        StringBuilder sb = new StringBuilder();        queue.offer(root);        while (!queue.isEmpty()) {            TreeNode node = queue.poll();            if (node != null) {                sb.append(node.val+",");                queue.offer(node.left);                queue.offer(node.right);            } else {                sb.append("null,");            }        }        return sb.toString();    }    // Decodes your encoded data to tree.    public TreeNode deserialize(String data) {        if (data == null) {            return null;        }        String[] strs = data.split(",");        TreeNode[] nodes = new TreeNode[strs.length];        int[] nulls = new int[strs.length];        for (int i = 0; i < nodes.length; i++) {            if (i > 0) {                nulls[i] = nulls[i - 1];            }            if (strs[i].equals("null")) {                nulls[i]++;            } else {                nodes[i] = new TreeNode(Integer.valueOf(strs[i]));            }        }        for (int i = 0; i < nodes.length; i++) {            if (nodes[i] != null) {                TreeNode left = nodes[2 * (i - nulls[i]) + 1];                TreeNode right = nodes[2 * (i - nulls[i]) + 2];                nodes[i].left = left;                nodes[i].right = right;            }        }        return nodes[0];    }}// Your Codec object will be instantiated and called as such:// Codec codec = new Codec();// codec.deserialize(codec.serialize(root));

0 0
原创粉丝点击