ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指 Offer 37. 序列化二叉树

2021-06-30 09:02:41  阅读:143  来源: 互联网

标签:null TreeNode 37 new queue 二叉树 sb treeNode 序列化


剑指 Offer 37. 序列化二叉树

难度困难

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

示例: 

你可以将以下二叉树:

1

/ \

2 3

/ \

4 5

序列化为 "[1,2,3,null,null,4,5]"

注意:本题与主站 297 题相同:https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/

/**

* 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 "[]";

            }

            StringBuilder sb = new StringBuilder();

            sb.append("[");

            Queue<TreeNode> queue = new LinkedList<>();

            queue.add(root);

            while (!queue.isEmpty()) {

                TreeNode treeNode = queue.poll();

                if (treeNode == null) {

                    sb.append("null,");

                } else {

                    sb.append(treeNode.val).append(",");

                    queue.add(treeNode.left);

                    queue.add(treeNode.right);

                }

            }

            sb.deleteCharAt(sb.length() - 1);

            sb.append("]");

            return sb.toString();

        }

        // Decodes your encoded data to tree.

        public TreeNode deserialize(String data) {

            if (data == "[]") {

                return null;

            }

            String[] strings = data.substring(1, data.length() - 1).split(",");

            TreeNode root = new TreeNode(Integer.parseInt(strings[0]));

            Queue<TreeNode> queue = new LinkedList<>();

            queue.add(root);

            int i = 1;

            while (!queue.isEmpty()) {

                TreeNode treeNode = queue.poll();

                 if (!strings[i].equals("null")) {

                    treeNode.left = new TreeNode(Integer.parseInt(strings[i]));

                    queue.add(treeNode.left);

                }

                i++;

                if (!strings[i].equals("null")) {

                    treeNode.right = new TreeNode(Integer.parseInt(strings[i]));

                    queue.add(treeNode.right);

                }

                i++;

            }

            return root;

        }

}

// Your Codec object will be instantiated and called as such:

// Codec codec = new Codec();

// codec.deserialize(codec.serialize(root));

标签:null,TreeNode,37,new,queue,二叉树,sb,treeNode,序列化
来源: https://blog.csdn.net/xwdrhgr/article/details/118353549

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有