序列化二叉树

序列化二叉树

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

序列化二叉树:
层次遍历的改进,定义一个数值sum用来存储当前队列中不为空值的个数。

public static String Serialize(TreeNode root) {
        String result = "";
        if(root == null) {
            result = "null";
            return result;
        }
        StringBuffer str = new StringBuffer();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        int sum = 1; //用来记录队列中当前不为空的个数
        while(sum!=0){
            TreeNode t = queue.poll();
            if(t == null ){
                str.append("null");
            }else{
                if(t.left!=null) {
                    sum++;
                }
                if(t.right!=null) {
                    sum++;
                }
                queue.add(t.left);
                queue.add(t.right);
                str.appe***al);
                sum--;
            }
            if(sum > 0) 
                str.append(",");
        }
        result = str.toString();
        return result;
    }

反序列化二叉树
定义一个数组treeNodes用来存放val值等于序列中的值TreeNode节点。

TreeNode Deserialize(String str) {
    TreeNode head = null;    
    if(str == null || str.length() == 0)        
        return head;     
    String[] nodes = str.split(",");   
    TreeNode[] treeNodes = new TreeNode[nodes.length];    
    for(int i=0; i<nodes.length; i++){       
    if(!nodes[i].equals("null"))          
        treeNodes[i] = new TreeNode(Integer.valueOf(nodes[i]));   
    }      
    for(int i=0, j=1; j<treeNodes.length; i++){        
        if(treeNodes[i] != null){        
            treeNodes[i].left = treeNodes[j++];
            if(j<treeNodes.length)
                 treeNodes[i].right = treeNodes[j++];      
        }     
    }   
return treeNodes[0];
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
2024-12-18 15:35
程序员牛肉:完全是在胡写简历。 我很好奇你干嘛要在教育经历里面写你是软件二班的班长?你写它的目的是什么?我觉得真的就是很突兀。给我第一感觉就是:你真的是一个心智健全的成年人吗? 另外我也很好奇你是怎么做到参加了这么多所谓的计算机比赛,完事儿一个拿得出手的项目都没有。 自己的项目经历还是图书馆管理系统这种垃圾东西……我的的建议是你都不如大幅度删减一下自己的水奖项,看着真的给人一种又水又学傻了的感觉。 计算机不看奖项,看院校和个人能力。 计算机是强工科,你要投后端的你就应该明白,人家招你进去是指望你干活儿的。那你觉得你这份简历有展示出你的后端水平吗? 你动动你的脑子想一想,人家面试官要想通过你的简历看出你的项目开发能力,最重要的板块就是两个,第一个是你的实习,第二个是你的项目。你没有实习,是不是就应该在项目上好好琢磨琢磨? 你自己看看你项目写的什么描述,你作为一个要后端岗位的应届生,你对你自己项目的描述还仅仅停留在使用mySQL,使用JAVA,使用spring boot框架。给人一眼感觉就感觉完全就是你做的玩具。可能就是你哪一个学期做的课设。 对于应届生来讲,在项目板块要尽量突出自己的技术能力,因为谈业务你肯定也不懂。简单来讲,你的项目要清晰准确的表达:你用哪种技术解决了现有的哪种技术问题,带来了多少的效益提升? 所有关于项目的描述都围绕我说的这种表达方式去写。不要自己自嗨式的写一堆垃圾上去 你既没有实习项目,又没有一个比较好一点的项目,而且院校也比较差,所以找工作会异常的难找。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务