Nowcoder java-序列化二叉树

Nowcoder java-序列化二叉树

(题目来自牛客网)
在这里插入图片描述

思路

前序序列化,那么反序列化时也必须是前序;
中序序列化,那么反序列化时也必须是中序;
后序序列化,那么反序列化时也必须是后序;
层序序列化,那么反序列化时也必须是层序;
所以说:怎么序列化就怎么反序列化
在这里插入图片描述

代码

import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;

public class SerializeAndDeserialize {
    /**
     * 前序遍历序列化
     * 每个结点用"_"分割开,空结点用"#"表示
     */
    String Serialize(TreeNode root) {
        if (root == null) {
            return "#_";
        }
        String res = root.val + "_";
        res += Serialize(root.left);
        res += Serialize(root.right);
        return res;
    }

    /**
     * 将序列化字符串装入一个queue中
     */
    TreeNode Deserialize(String str) {
        Queue<String> queue = new LinkedList<>();
        Collections.addAll(queue, str.split("_"));
        return Deserialize(queue);
    }

    /**
     * 前序遍历反序列化
     * 从队列中取出一个判断是否是"#",如果是表示该结点为null,否则新建结点
     */
    private TreeNode Deserialize(Queue<String> queue) {
        String string = queue.poll();
        if (string.equals("#")) {
            return null;
        }
        TreeNode root = new TreeNode(Integer.parseInt(string));
        root.left = Deserialize(queue);
        root.right = Deserialize(queue);
        return root;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值