题解 | #序列化二叉树#

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

import java.util.*;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    TreeNode nullNode = new TreeNode(-1);
    String Serialize(TreeNode root) {
        if(root == null){
            return "";
        }
        StringBuilder sb = new StringBuilder();
        Deque<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            root = queue.poll();
            sb.append(root.val+"!");
            if(root!=nullNode){
                if(root.left!=null){
                    queue.add(root.left);
                }else{
                    queue.add(nullNode);
                }
                if(root.right!=null){
                    queue.add(root.right);
                }else{
                    queue.add(nullNode);
                }
            }
        }
        return sb.toString();
    }
    TreeNode Deserialize(String str) {
        if("".equals(str)){
            return null;
        }
        String[] vals = str.split("!");
        TreeNode root = new TreeNode(Integer.parseInt(vals[0]));
        Deque<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        for(int i = 1; i < vals.length; i+=2){
            TreeNode node = queue.poll();
            int left = Integer.parseInt(vals[i]);
            int right = Integer.parseInt(vals[i+1]);
            if(left!=-1){
                node.left = new TreeNode(left);
                queue.add(node.left);
            }
            if(right!=-1){
                node.right = new TreeNode(right);
                queue.add(node.right);
            }
        }
        return root;
    }
}

全部评论

相关推荐

最近看到华为台风天还让员工上班,感觉近些年华为的风评都不咋样了我投了华为已经二面了,不知道能不能进入到华为,有点迷了
嵌入式劝退第一人:华为风评一直没好过,但每年也依然是一大批应届生的梦中情司,不冲突的。要我说,华为才是真的体面厂,说你在华为工作,身边的人,长辈什么的谁不说你一声牛逼
点赞 评论 收藏
分享
09-16 17:32
门头沟学院 Java
顺顺超爱学:1.熟悉Java编程语言,熟悉集合,多线程,IO,反射等核心知识,了解线程池,ThreadLocal等进阶知识; 2.熟悉Mysql数据库,熟练使用sql,熟悉索引,存储引擎,事务原理,MVCC,锁机制,了解sql优化; 3.熟悉Redis缓存,了解常见的数据类型,了解缓存常见问题及其解决方案,了解使用Redis实现的分布式锁方案; 4.熟悉Javaweb开发框架,熟悉spring,springmvc,mybatis等,了解IOC,AOP等; 5.熟悉微服务开发框架,熟悉SpringBoot,SpringCloud,包括Nacos,OpenFeign,Gateway等核心组件; 6.熟悉Rabbitmq消息队列,熟练使用消息模型,了解架构,消息可靠性,死信队列,延迟消息等;
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务