题解 | #序列化二叉树#

序列化二叉树

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

参考别人的代码,层序遍历,用!做分割,用#代表空指针,这里的层序遍历空指针也要遍历进去。
/*,
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.*;
public class Solution {
    
    String Serialize(TreeNode root) {
        StringBuilder sb=new StringBuilder();
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int len=queue.size();
            for(int i=0;i<len;i++)
            {
                TreeNode tmp=queue.poll();
                if(tmp!=null){    //与一般的层序遍历不一样,这里把空指针也放进去了
                    sb.append(String.valueOf(tmp.val)+"!");
                    queue.add(tmp.left);
                    queue.add(tmp.right);
                }
                else{
                    sb.append("#!");     //用!分割,用#代替null
                }
            }

        }
        return sb.toString();
    }
    TreeNode Deserialize(String str) {
        int n=str.length();
        Queue<TreeNode> queue=new LinkedList<>();
        Queue<String> q=new LinkedList<>();
        String[]s=str.split("!");
        for(int i=0;i<s.length;i++){
            q.add(s[i]);
        }
        String rootVal=q.poll();
        if(rootVal.equals("#")){
            return null;
        }
        TreeNode root=new TreeNode(Integer.parseInt(rootVal));
        queue.add(root);
        while(!queue.isEmpty()){
            int len=queue.size();
            for(int i=0;i<len;i++){
                TreeNode tmp=queue.poll();
                String leftVal=q.poll();
                String rightVal=q.poll();
                TreeNode treeNodeL=leftVal.equals("#")?null:new TreeNode(Integer.parseInt(leftVal));
                TreeNode treeNodeR=rightVal.equals("#")?null:new TreeNode(Integer.parseInt(rightVal));
                tmp.left=treeNodeL;
                tmp.right=treeNodeR;
                if(treeNodeL!=null){
                    queue.add(treeNodeL);
                }
                if(treeNodeR!=null){
                    queue.add(treeNodeR);
                }
             }
        }
        return root;
       
    }
}
全部评论

相关推荐

01-17 18:15
已编辑
门头沟学院 前端工程师
从上午约我面试然后他迟到,然后中午发消息打电话给我说重约面试时间,我就该意识到。【管理不规范,只是这家公司最小的问题】他妈一个不是技术的人来给我技术面。。。连vvue什么?连react是什么?连普通的HTTP请求是什么?这些东西都不懂的人来给我做技术面,我真的。。。。他妈浪费我40分钟。。一天面了三场,这家公司属实牛逼。不停的问我说上班下班时间谁来派任务公司在哪个区发展怎么样,公司的管理模式什么样,培养机制怎么样带教负责什么。如果出bug了谁来负责。我真的求你了别闹了。我答了15分钟,我已经很不想回答了。然后他就问了我一些很招笑的面试问题。问我前端框架架构设计怎么设计,Websocket可以实现SSE吗??最后还要我硬说,为什么我们公司没转正?为什么?为什么?我说我怎么知道。。这是领导决定,又不是我决定,他说让我分析一下。。。我真的草了,这个人是来搞我的吗?我最后问我说这个没有技术面,他说他就是技术面虽然我今天面的另外两家也很逆天。一个人不停的吹牛,自己100人的公司是全国前几,吹牛了一个小时。我中途几次想跑,真的是底下玩手机在听他那吹牛。。然后最后来了句说,我承诺的东西要实现哦,不然的话,公司会追责的,我我请问我承诺了什么?从头到尾也没有说让我承诺什么。而且我只是作为一个小小的前端卡拉咪,应届生。我要承担什么??好崩溃。。好崩溃的,一天面了三场。两家1000-9999的公司。面试官问的都很傻逼,甚至有些东西我问他估计都答不出来。。&nbsp;我这是在干嘛呀?浪费我一天的时间,我的奶奶。。我本来是抱着说我很菜,我要面试中发现自己的问题,现在来看他妈的这三场面试,面试本身就是问题。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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