首页 > 其他分享 >【BFS】LeetCode 297. 二叉树的序列化与反序列化

【BFS】LeetCode 297. 二叉树的序列化与反序列化

时间:2023-01-12 10:12:58浏览次数:68  
标签:node queue right TreeNode BFS 二叉树 new 序列化

题目链接

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

思路

代码

class Codec {
    // Encodes a tree to a single string.
    public String serialize(TreeNode root) {
        if(root == null){
            return "";
        }

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

        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();

            if(node == null){
                sb.append("X,");
            }else{
                sb.append(node.val + ",");
                queue.offer(node.left);
                queue.offer(node.right);
            }
        }

        return sb.toString();
    }

    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        if(Objects.equals(data, "")){
            return null;
        }

        Queue<String> nodes = new ArrayDeque<>(Arrays.asList(data.split(",")));
        TreeNode root = new TreeNode(Integer.parseInt(nodes.poll()));
        Queue<TreeNode> queue = new ArrayDeque<>();

        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            String left = nodes.poll();
            String right = nodes.poll();

            if(!left.equals("X")){
                node.left = new TreeNode(Integer.parseInt(left));
                queue.add(node.left);
            }
            if(!right.equals("X")){
                node.right = new TreeNode(Integer.parseInt(right));
                queue.add(node.right);
            }
        }

        return root;
    }
}

标签:node,queue,right,TreeNode,BFS,二叉树,new,序列化
From: https://www.cnblogs.com/shixuanliu/p/17045652.html

相关文章

  • CQF学习笔记M1L2二叉树模型
    https://blog.csdn.net/weixin_42859140/article/details/107018914?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCo......
  • 洛谷P1040. 加分二叉树
    题目描述设一个\(n\)个节点的二叉树tree的中序遍历为(\(1,2,3,…,n\)),其中数字\(1,2,3,…,n\)为节点编号。每个节点都有一个分数(均为正整数),记第\(i\)个节点的分数......
  • 代码随想录 Day15 LeetCode102. 二叉树的层序遍历
    102.二叉树的层序遍历classSolution{public:vector<vector<int>>levelOrder(TreeNode*root){vector<vector<int>>result;queue<TreeNode*......
  • 【BFS】LeetCode 103. 二叉树的锯齿形层序遍历
    题目链接103.二叉树的锯齿形层序遍历思路1额外加一个栈来使得访问节点的顺序是逆序的代码1classSolution{publicList<List<Integer>>zigzagLevelOrder(Tree......
  • 输出二叉树的右视图
    题目要求题目链接思路分析方法一:刚开始做的时候没有什么思路,就采用了最笨的方法根据中序和先序求出二叉树得到层序遍历的结果得到每一层的最后一个元素方法比较笨......
  • Django序列化器的简单使用
    [Django序列化器的简单使用-SSgeek-博客园](https://www.cnblogs.com/ssgeek/p/13263810.html)注意:serializer 不是只能为数据库模型类定义,也可以为非数据库模型类的......
  • 543. 二叉树的直径
    题目给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。注意:两结点之间的路径长度......
  • 算法刷题 Day 14 | 二叉树的递归遍历
    今日内容:理论基础递归遍历迭代遍历统一迭代详细布置理论基础需要了解二叉树的种类,存储方式,遍历方式以及二叉树的定义文章讲解:https://programm......
  • 重建二叉树
    题目描述思路分析在中序遍历列表中找到先序遍历列表中第一个节点,以此为界限可以将二叉树分为左右子树,可以得知左子树和右子树的长度,在先序遍历列表中划分出来。再依次拿......
  • 二叉树
    1.二叉树的概念二叉树是n个有限元素的集合,该集合或为空、或由一个根节点及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为......