• Leetcode 刷题日记 剑指 Offer II 048. 序列化与反序列化二叉树


    原题链接(https://leetcode.cn/problems/h54YBf/)

    题目描述

    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。

    请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。

    示例1

    示例1

    输入:root = [1,2,3,null,null,4,5]
    输出:[1,2,3,null,null,4,5]

    示例2

    输入:root = []
    输出:[]

    示例3

    输入:root = [1]
    输出:[1]

    示例4

    输入:root = [1,2]
    输出:[1,2]

    数据约束

    • 树中结点数在范围 [0, 104] 内
    • -1000 <= Node.val <= 1000

    思路

    对于将二叉树序列化最自然想到的就是二叉树的哪几种遍历方式了——先序遍历,中序遍历,后序遍历,这里采用先序遍历构建一个字符串,对于每一个节点将其对应的数字加入到其中,同时使用"null"填充二叉树使得二叉树成为一个“满二叉树”,在构造时使用String的split函数将其分解为字符数组,然后再用队列存储每个节点,每次都让一个节点出队,遇到为"null"的节点自然就给那个节点null即可。
    示例1将会变为
    变化之后的二叉树

    代码

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Codec {
    
    	public String serialize(TreeNode root) {
    		return serialize(root, "");
    	}
    
    	public String serialize(TreeNode root, String str) {
    		if (root == null) {
    			str += "null,";
    
    		} else {
    			String tmp = root.val + ",";
    			str += tmp;
    			str = serialize(root.left, str);
    			str = serialize(root.right, str);
    		}
    		return str;
    
    	}
    
    	// Decodes your encoded data to tree.
    	public TreeNode deserialize(String data) {
    		String[] nodes=data.split(",");
    		Queue<String> queue=new LinkedList<>(Arrays.asList(nodes));
    		return deserialize(queue);
    		
    	}
    	public TreeNode deserialize(Queue<String> queue) {
    		String val=queue.poll();
    		if(val.equals("null")) {
    			
    			return null;
    		}
    		TreeNode node=new TreeNode(Integer.parseInt(val));
    		
    		node.left=deserialize(queue);
    		node.right=deserialize(queue);
    		return node;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
  • 相关阅读:
    【弱监督学习】Learning from Incomplete and Inaccurate Supervision
    跨类型文本文件,反序列化与类型转换的思考
    《Effective Objective-C 2.0》读书笔记——熟悉Objective-C
    JVM内存模型
    ARM Cortex-A9:裸机开发,点亮LED3
    《全职猎人》
    这是什么代码帮我看看
    2023年05月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
    FPGA工程师是否有必要转ASIC设计工程师?哪个前景好?
    四大场景化模型算法搞定贷中营销场景|实操与效果比对
  • 原文地址:https://blog.csdn.net/qq_45703684/article/details/126002160