栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指Offer(第二版):59 - I. 滑动窗口的最大值 37. 序列化二叉树

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指Offer(第二版):59 - I. 滑动窗口的最大值 37. 序列化二叉树

dsadadss
s

class Solution {
    public int[] maxSlidingWindow(int[] nums, int k) {
        //边界判断,可以不写,因为已经给了范围
        if(nums.length==0 || k>nums.length)
            return new int[0];
        //返回数组
        int[] res = new int[nums.length-k+1];
        //创建队列   队列的要求:1、首先存放的是下标  2、队列中存放的下标对应的值是递减的
        linkedList queue = new linkedList<>();
        //每次移动右指针
        for(int rIdx = 0 ; rIdx=nums[queue.peekLast()]){
                queue.removeLast();
            }
            queue.addLast(rIdx);
            //求窗口左侧边界
            int lIdx = rIdx-k+1;
            //判断2 这是判断窗口长度的
            if(queue.peekFirst()=k)
                res[lIdx] = nums[queue.peekFirst()]; 
        }
        return res;
    }
}

public class Codec {

    // Encodes a tree to a single string. 
    public String serialize(TreeNode root) {

        if(root == null) return "[]";
        StringBuilder res = new StringBuilder("[");

        //①:bfs
        Queue queue = new linkedList<>() {{ add(root); }};
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            if(node != null) {
                res.append(node.val + ",");
                queue.add(node.left);
                queue.add(node.right);
            }
            else res.append("null,");
        }
        //②:dfs怎么写呢?  dfs(root ,res);   想错了,我们要和反序列化取反,都要bfs,或者都dfs
        
        
        res.deleteCharAt(res.length()-1);  //去除最后的","号。
        res.append("]");
        return res.toString();
    }
    // private void dfs(TreeNode node , StringBuilder res){
    //     if(node == null){
    //         res.append("null,");
    //         return;
    //     }
    //     res.append(node.val).append(",");
    //     dfs(node.left,res);
    //     dfs(node.right,res);
    // }
    



    // Decodes your encoded data to tree.
    public TreeNode deserialize(String data) {
        //边界判断
        if(data.equals("[]"))
            return null;
        //找出所有的数
        String[] data_arr = data.substring(1,data.length()-1).split(",");
        TreeNode root = new TreeNode(Integer.parseInt(data_arr[0]));  //首节点
        //放入队列中
        Queue queue = new linkedList<>(){{add(root);}};
        //这时候数组下标  
        int i=1;
        while(!queue.isEmpty()){
            TreeNode node = queue.poll();
            if(!data_arr[i].equals("null")){
                node.left = new TreeNode(Integer.parseInt(data_arr[i]));
                queue.offer(node.left);
            }
            i++;
            if(!data_arr[i].equals("null")){
                node.right = new TreeNode(Integer.parseInt(data_arr[i]));
                queue.offer(node.right);
            }
            i++;
        }
        return root;
    }
}

// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号