每日5题Day22 - LeetCode 106 - 110

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前!

第一题:106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)

class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        Map<Integer, Integer> map = new HashMap<>();
        //把中序每个点都记录下来
        for(int i = 0; i < inorder.length; i++){
            map.put(inorder[i], i);
        }
        //传入后序的最后一个节点,因为是根节点
        TreeNode head = helper(0, inorder.length - 1, map, postorder, postorder.length - 1);
        return head;
    }

    private static TreeNode helper(int low, int high, Map<Integer, Integer> map, int[] postorder, int idx){
        if(low > high){
            return null;
        }
        //找到对应的值
        int val = postorder[idx];
        //在中序中找到分割点
        int index = map.get(val);
        TreeNode node = new TreeNode(val);
        //递归找到左右子树
        node.left = helper(low, index - 1, map, postorder, idx - (high - index) - 1);
        node.right = helper(index + 1, high, map, postorder, idx - 1);
        return node;
    }
}

第二题:107. 二叉树的层序遍历 II - 力扣(LeetCode)

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        //就是使用栈每次把每一层记录下来,最后逆序输出
        //本质上还是属于层序遍历
        List<List<Integer>> res = new ArrayList<>();
        if(root == null){
            return res;
        }
        Deque<TreeNode> stack = new ArrayDeque<>();
        stack.offer(root);
        while(!stack.isEmpty()){
            List<Integer> tmp = new ArrayList<>();
            int size = stack.size();
            for(int i = 0; i < size; i++){
                TreeNode cur_node = stack.poll();
                tmp.add(cur_node.val);
                if(cur_node.left != null){
                    stack.offer(cur_node.left);
                }
                if(cur_node.right != null){
                    stack.offer(cur_node.right);
                }
            }
            res.add(0,tmp);
        }
        return res;
    }
}

第三题:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        //题目提到有序,二叉,高度要平衡,
        //相当于每次我们找到节点都是要中间节点
        //随后向两边扩散,所以创建二叉搜索树的时候一定要二叉
        return helper(nums, 0 , nums.length - 1);
    }

    private TreeNode helper(int[] nums, int left, int right){
        if(left > right){
            return null;
        }
        //找到中间节点
        int mid = left + (right - left) / 2;
        TreeNode node = new TreeNode(nums[mid]);
        //递归
        node.left = helper(nums, left, mid - 1);
        node.right = helper(nums, mid + 1, right);
        //注意是返回某个节点
        return node;
    }
}

第四题:109. 有序链表转换二叉搜索树 - 力扣(LeetCode)

class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        if (head == null) {
            return null; // 基本情况
        }
        return convertToBST(head, null);
    }

    private TreeNode convertToBST(ListNode head, ListNode tail) {
        if (head == tail) {
            return null; // 基本情况:子列表为空
        }
        //使用快慢指针来实现二分中查找中位的过程
        ListNode slow = head;
        ListNode fast = head;
        while (fast != tail && fast.next != tail) {
            slow = slow.next;
            fast = fast.next.next;
        }

        TreeNode root = new TreeNode(slow.val);
        root.left = convertToBST(head, slow);
        root.right = convertToBST(slow.next, tail);
        
        return root;
    }
}

 第五题:110. 平衡二叉树 - 力扣(LeetCode)

class Solution {
    public boolean isBalanced(TreeNode root) {
        //对于每一个点进行递归判断
        return getH(root) != -1;
    }

    private static int getH(TreeNode node){
        //对于每一个特定的点,如果为空则高度为0
        if(node == null){
            return 0;
        }
        //找到左边,如果左边不满足,则自身也不满足
        int left = getH(node.left);
        if(left == -1){
            return -1;
        }
        //同理,右边同样逻辑
        int right = getH(node.right);
        if(right == -1){
            return -1;
        }
        //注意下面判别式,判断左右高度差值是否大于1
        //大了肯定不满足了
        //否则我们给出一个最大高度
        if(Math.abs(left - right) > 1){
            return -1;
        }else{
            return Math.max(left, right) + 1;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/702533.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

航班进出港管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;用户管理&#xff0c;航班信息管理&#xff0c;航飞降落请求管理&#xff0c;公告信息管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告信息&a…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换主干网络之 StarNet | 《重写星辰⭐》

本改进已集成到 YOLOv8-Magic 框架。 论文地址:https://arxiv.org/abs/2403.19967 论文代码:https://github.com/ma-xu/Rewrite-the-Stars 最近的研究引起了人们对“星形运算”(按元素乘法)在网络设计中未被充分利用的潜力的关注。虽然直观的解释很多,但其应用的基本原理…

C# WinForm ——31 32 Menustrip菜单栏

1. 介绍 菜单控件&#xff0c;包含多个菜单项的菜单容器 主菜单下面可以有子菜单&#xff0c;子菜单下面可以有下一级子菜单 2. 常用属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到Enabled控件是否启用Dock定义要绑定到容器的控件边框&#xff0c;默认是t…

IDEA配置mybatis-config.xml模板文件

IDEA配置mybatis-config.xml模板文件 File>>Settings>>File and Code Templates 创建mybatis-config.xml模板 模板内容取自mybatis官网 mybatis官网 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC &qu…

WEB基础--TOMCAT服务器

服务器概述 什么是服务器 服务器&#xff1a;就是一个提供为人民服务的机器&#xff0c;这里的服务器主要指计算机服务器&#xff0c;分为两种&#xff1a;服务器软件和硬件服务器&#xff1b; 服务器分类 1、硬件服务器&#xff1a;安装了服务器软件的主机。就相当于高配的…

LogicFlow 学习笔记——2. LogicFlow 基础 实例

LogicFlow 实例 创建实例 每一个流程设计界面&#xff0c;就是一个 LogicFlow 的实例。 <template><div id"container"></div><!-- 用于显示 LogicFlow 图表的容器 --> </template> <script>// 创建 LogicFlow 实例const lf …

赛氪网受邀参加上海闵行区翻译协会年会,共探科技翻译创新之路

在科技飞速发展的时代背景下&#xff0c;翻译行业正面临着前所未有的机遇与挑战。作为连接高校、企业与社会的桥梁&#xff0c;赛氪网在推动翻译创新、促进学术交流方面展现出了独特的魅力。2024年6月9日&#xff0c;在华东师范大学外语学院举办的第十三届上海市闵行区翻译协会…

C++(构造和析构)

目录 1. 构造函数 1.1 概念 1.2 构造函数的分类 1.2.1 默认构造函数 1.2.2 带参数的构造函数 1.2.3 拷贝构造函数 1.2.4 移动构造函数 2. 析构函数 2.1 概念 3. 每期一问 3.1 上期答案 1. 构造函数 1.1 概念 在C中&#xff0c;构造函数&#xff08;Constructor&am…

Python - OS模块+sys模块

一、OS模块基本用法&#xff1a; import osprint(os.getcwd()) # 获取当前工作目录os.chdir(data) # 改变当前脚本工作目录&#xff1b;相当于终端里面的cd命令 print(os.getcwd()) # 获取当前工作目录 运行结果&#xff1a; D:\__TC22008_VBF\FOTA-vFlash-AutoTest D:\__TC22…

Mac下载了docker,在终端使用docker命令时用不了

问题&#xff1a;在mac使用docker的时候&#xff0c;拉取docker镜像失败 原因&#xff1a;docker是需要用app使用的 &#xff0c;所以在使用的时候必须打开这个桌面端软件才可以在终端上使用docker命令&#xff01;&#xff01;&#xff01;

【企业家必看】解锁财富新机遇:二人订单共享模式

在这个充满变革与创新的时代&#xff0c;我们有幸向您介绍一种全新的商业模式——二人订单共享模式。这不仅是一次商业创新&#xff0c;更是一次财富与价值共享的革命。 终身消费&#xff0c;终身收益 只需一次499元的终身消费&#xff0c;您即可成为会员。这意味着&#xff0…

JavaScript的选择结构和循环结构

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

晋级决赛 | 璞华龙舟队:驰骋双湖展雄风,龙舟“浪”出新高度!

“金荡杯”第三届江苏省传统龙舟邀请赛 6月2日&#xff0c;“金荡杯”第三届江苏省传统龙舟邀请赛&#xff08;鹅湖站&#xff09;在风景如画的鹅湖畔火热开赛。 碧波荡漾的湖面上&#xff0c;数条龙舟犹如一条条巨龙&#xff0c;蓄势待发&#xff0c;准备在比赛中一展风采。随…

cesium 多边形加边框宽度 Polygon outlineWidth

cesium中用polygon添加多边形时&#xff0c;设置outlineWidth无效&#xff0c;常见做法是在添加polygon的同时加一个polyline&#xff0c;但是当多边形相邻两条边的角度比较小的情况下&#xff0c;这两个点的连接处有明显的交叉。 解决方案&#xff1a; 第一步&#xff1a;通过…

Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(2)

我们继续分析Chromium的Mojo模块。 Dispatcher Dispatcher 是 Mojo IPC 系统中的一个关键概念。它是一个虚基类类&#xff08;或接口&#xff09;&#xff0c;用于实现与特定 MojoHandle 相关联的 Mojo 核心 API 调用。在 Mojo 系统中&#xff0c;应用程序通过这些 API 与各种…

Python基于车牌识别的车辆进出管理系统

目录 1、效果图2、具体内容系统流程开发工具和环境项目所需依赖包目录描述&#xff1a;启动Django服务登录账号 3、源码下载技术交流 博主介绍&#xff1a; 计算机科班人&#xff0c;全栈工程师&#xff0c;掌握C、C#、Java、Python、Android等主流编程语言&#xff0c;同时也熟…

JavaWeb5 SpringBoot+HTTP协议

Spring Spring Boot 非常快速构建应用程序&#xff0c;简化开发 &#xff08;1&#xff09;创建Springboot工程&#xff0c;勾选web开发依赖 创建好的目录&#xff0c;并将没用多余的删掉了 &#xff08;2&#xff09;定义请求处理类&#xff0c;并添加方法 创建请求处理类…

华为云DDoS攻击下的应对策略

当华为云上的服务遭遇大规模DDoS攻击导致网络流量异常&#xff0c;触发了华为云的自动防护机制&#xff0c;即所谓的“黑洞”状态时&#xff0c;服务将暂时无法访问&#xff0c;直至攻击停止或流量恢复正常。本文将探讨如何在这一情况下&#xff0c;通过引入第三方安全产品来快…

目标检测——DeepGlobe道路提取数据集

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

Springboot使用webupload大文件分片上传(包含前后端源码)

Springboot使用webupload大文件分片上传&#xff08;包含源码&#xff09; 1. 实现效果1.1 分片上传效果图1.2 分片上传技术介绍 2. 分片上传前端实现2.1 什么是WebUploader&#xff1f;功能特点接口说明事件APIHook 机制 2.2 前端代码实现2.2.1&#xff08;不推荐&#xff09;…