【二叉树进阶题目2】(算法题详细简介)

【二叉树进阶题目2】(算法题详细简介)

  • 前言
  • 5. 二叉树的层序遍历 ||(力扣107)
    • 5.1 题目链接
    • 5.2 示例分析
    • 5.3 代码实现
  • 6. 二叉树的层序遍历(力扣102)
    • 6.1 题目链接
    • 6.2 代码实现
  • 7. 根据二叉树创建字符串(力扣606)
    • 7.1 题目链接
    • 7.2 示例分析
    • 7.3 代码实现
  • 8. 二叉树的最近公共祖先(力扣236)
    • 8.1 题目链接
    • 8.2 示例分析
    • 8.3 代码实现

前言

下面是上一篇文章的链接,有需要的朋友们可以点击下方链接跳转呦~

【二叉树进阶题目1】(算法题详细简介)

下面是本文讲解的题目链接,大家可以先自己尝试一下,再看下文题解~

5. 二叉树的层序遍历 ||(力扣107)

6. 二叉树的层序遍历(力扣102)

7. 根据二叉树创建字符串(力扣606)

8. 二叉树的最近公共祖先(力扣236)

5. 二叉树的层序遍历 ||(力扣107)

5.1 题目链接

下面是题目链接:

5. 二叉树的层序遍历 ||(力扣107)

5.2 示例分析

  • 由于返回类型为二位线性表,所以要先创建线性表
  • 实现基本的层序遍历(用队列实现)
  • 层序遍历的输出顺序是按照从下往上的顺序输出的(先储存后输出)

5.3 代码实现

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {

        // 创建一个二维链表
        List<List<Integer>> list = new ArrayList<>();
        // 普通的层序遍历
        // 创建一个队列
        Deque<TreeNode> deque = new ArrayDeque<>();
        while (root != null || !deque.isEmpty()) {
            while (deque.isEmpty()) {
                deque.offer(root);
            }

            int size = deque.size();
            // 创建一个一维链表
            List<Integer> l = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                // 队列中插入子树
                if (root.left != null)
                    deque.offer(root.left);
                if (root.right != null)
                    deque.offer(root.right);
                // 将目前队列中的数据存储到链表中
                l.add(deque.pop().val);
                root = deque.peek();
            }
            // 因为顺序为自下而上,所以为头插
            list.add(0, l);

        }
        return list;
    }
}

6. 二叉树的层序遍历(力扣102)

6.1 题目链接

这道题和上述题目相似,这道题是自上而下的方式输出,下面是题目链接,大家一起尝试一下吧。

6. 二叉树的层序遍历(力扣102)

6.2 代码实现

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
                List<List<Integer>> ret = new LinkedList<>();
        Deque<TreeNode> deque=new ArrayDeque<>();
        while(root!=null||!deque.isEmpty()){
            if(deque.isEmpty()){
                deque.push(root);
            }
            int size=deque.size();
            List<Integer> list=new ArrayList<>();
            for (int i = 0; i < size; i++) {
                TreeNode t=new TreeNode(deque.pop().val);
                list.add(t.val);

                if(root.left!=null) deque.offer(root.left);
                if(root.right!=null) deque.offer(root.right);

                root=deque.peek();
            }
            ret.add(list);
        }
        return ret;
    }
}

7. 根据二叉树创建字符串(力扣606)

7.1 题目链接

点击下面链接开始做题吧!

7. 根据二叉树创建字符串(力扣606)

7.2 示例分析

本题的解决思路为子问题的方法

对比示例1和示例2,我们可以发现

  1. 当左子树不为空,右子树为空时,输出为“2(4)”
  2. 当左子树为空,右子树不为空时,输出“2()(4)”
  3. 当左子树不为空,右子树不为空时,输出“2(4)(4)”
  4. 当左子树为空,右子树为空时,输出“2”

由于本题的输出为字符串,并且有频繁的插入操作,所以我们创建StringBuilder.

7.3 代码实现

class Solution {
 public String tree2str(TreeNode root) {
        if(root==null) return "";
        if(root.left==null&&root.right==null){
            return Integer.toString(root.val);
        }
        if(root.left!=null&&root.right==null){
            return new StringBuilder().append(root.val).append("(").append(tree2str(root.left)).append(")").toString();
        }
        return new StringBuilder().append(root.val).append("(").append(tree2str(root.left)).append(")(")
                .append(tree2str(root.right)).append(")").toString();

    }
}

8. 二叉树的最近公共祖先(力扣236)

8.1 题目链接

8. 二叉树的最近公共祖先(力扣236)

8.2 示例分析

以示例1的二叉树为例,讨论本题的多种情况:

  • 第一种:在root的左右子树分别找到一个数,最近公共祖先为root
    在这里插入图片描述
  • 第二种:(这里可以有多种思路,我举一种思路的例子)
    左子树找到一个数就直接返回,右子树没有找到数,说明两个数都在左子树,说明左子树找到的第一个数就是最近祖先
    在这里插入图片描述
  • 第三种:其中一个数等于root,root为最近祖先
    在这里插入图片描述

8.3 代码实现

public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null||root==p||root==q) return root;
        TreeNode left=lowestCommonAncestor(root.left,p,q);
        TreeNode right=lowestCommonAncestor(root.right,p,q);
        //对应上述3种情况
        if(left==null&&right==null) return null;
        if(left==null) return right;
        if(right==null) return left;
        return root;
    }

关于二叉树的相关习题的两篇文章就结束了,希望对你有所帮助,我们下篇文章见!!!

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

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

相关文章

基于Pyecharts的数据可视化开发(二)调用通义千问api分析爬虫数据

上一篇博客做了关于“广州市2023年天气情况”的数据爬取&#xff0c;并保存为.csv文件。下一步是想用生成的.csv文件&#xff0c;直接调用大模型api进行分析&#xff0c;得出结论。通过调研&#xff0c;阿里云的通义千问大模型qwen-long可以实现对文件数据的分析。 通义千问大模…

SD-WAN:低延迟的国际网络连接方案

在全球化的商业环境中&#xff0c;企业业务正不断扩展至全球市场&#xff0c;急需实现高效、稳定的跨国网络连接。然而&#xff0c;传统的国际组网方式往往会遇到高延迟、低带宽和管理复杂等难题&#xff0c;导致企业运营效率下降并影响用户体验。本文将介绍SD-WAN如何解决这些…

WebRTC VAD 详解与代码示例

WebRTC VAD 详解与代码示例 WebRTC VAD的工作原理WebRTC VAD的代码示例总结WebRTC VAD(Voice Activity Detection,语音活动检测)是一种用于检测音频流中是否存在语音活动的技术。在实时通信系统中,VAD技术能够显著减少带宽消耗并优化系统资源利用,特别是在WebRTC这类实时音…

在macOS的多任务处理环境中,如何平衡应用的性能与用户体验?这是否是一个复杂的优化问题?如何优化用户体验|多任务处理|用户体验|应用设计

目录 一 多任务处理与应用性能 1. macOS中的多任务处理机制 2. 性能优化的基本策略 二 用户体验的关键要素 1. 响应速度 2. 界面友好性 3. 功能的直观性 三 平衡性能与用户体验的策略 1. 资源管理 2. 优化数据加载 3. 使用合适的线程模型 4. 实时监测和调整 四 使…

防静电监控系统为汽车电子工厂打造安全生产环境

汽车电子产品对静电极其敏感&#xff0c;微小的静电放电 (ESD) 都会导致元器件损坏&#xff0c;造成巨大的经济损失和产品质量问题。因此&#xff0c;在汽车电子工厂构建完善的ESD防静电防护体系至关重要。传统的防静电措施主要依赖人工巡检&#xff0c;效率低且难以保证实时监…

2024 AFS-46 电子数据存在性鉴定(移动终端)(2024能力验证)

一、委托事项 1.给出检材手机的MEID。 2.给出检材手机在2024年7月3日上午连接过的设备名称。 3.给出检材手机中kimi应用最近一次被中断回答的问题内容。 4.给出检材手机中安装过的即时通讯应用的包名&#xff08;不包含虚拟机中的应用&#xff09;。 5.检材手机中安装有几…

数据结构之双链表——考研笔记

文章目录 一.单链表VS双链表二.创建双链表&#xff08;带头结点&#xff09;三.双链表的插入四.双链表删除五.销毁双链表六.双链表遍历七. 循环链表八.静态链表1.用代码定义一个静态链表 一.单链表VS双链表 单链表中只包含指向它后继结点的指针&#xff0c;所以给定一个结点p找…

AI 原生时代,更要上云:百度智能云云原生创新实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 我今天分享的主题&#xff0c;是谈谈在云计算和 AI 技术快速发展和深入落地的背景下&#xff0c;百度智能云在云原生的基础设施产品和技术层面做的一些创新实践。 毋庸置疑&#xff0c;过去十几年云计算和 AI 技术是…

商场紧急情况处理:SpringBoot技术实践

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

.NET Core WebApi第7讲:项目的发布与部署

一、理解 前端跟后端拿数据&#xff0c;然后在前端页面中展示&#xff0c;就是我们要完成的事情。 把前端跟后端开发好之后&#xff0c;我们需要落地部署&#xff0c;这个时候就需要一个服务器。 服务器就是一台电脑&#xff0c;只要windows里面有一个叫IIS的管理器。 二、项目…

Python的PIL库初步使用:转换色彩空间

[] 简介 PIL&#xff0c;即Python图像处理库(Python Imaging Library)&#xff0c;conda默认环境便已提供&#xff0c;如果没有&#xff0c;可通过pip安装 pip install pillow有了PIL&#xff0c;就可以对文件进行读取和存储&#xff0c;示例如下 from PIL import Image pa…

画质修复怎么调?一键将模糊图片变高清的窍门分享

就是说有同样拿起手机拍照就手抖的朋友吗&#xff1f; 小编每次都是因为手抖&#xff0c;拍出来的每一张照片都是虚焦糊糊的&#xff0c;几乎每一张&#xff01;&#xff01; 防抖功能都抵挡不住的虚焦&#xff0c;只能寄希望于各种图片画质修复清晰app来拯救这些糊糊的图片了…

智融SW2505 PD控制器 DRC 双向IC

1. 概述 SW2505 是一款高度集成的 PD 控制器。它符合的 USB Type-C 和 PD 3.1 标准&#xff0c;并支持 BC1.2 和最流行的高压快速充电协议&#xff0c;带有 DPDM 接口。它的目标是笔记本电脑、加密狗、显示器、移动电源和电源适配器。SW2505 集成了一个 32 位、高达 40MHz 的 …

Python数据分析-移动设备使用情况和用户行为分析

一、研究背景 在信息化飞速发展的今天&#xff0c;移动设备已成为人们生活和工作中的必备工具。智能手机普及率持续增长&#xff0c;用户使用行为不断增多&#xff0c;从娱乐、社交到办公、学习&#xff0c;手机的使用已渗透到各个年龄段和社会群体。移动设备使用情况的多样化…

vue-echarts使用

vue-echarts使用 排名柱状图示例代码 汇总示例代码 平均时效示例代码 全图 排名柱状图 示例 代码 // 排名趋势<!-- 排名数据趋势图 --><div class"rank"><div class"rank_title"><div class"rank_title_left"><spa…

华为云企业门户EWP SSL证书安装指南

一、申请 SSL 证书 在华测 Ctimall 网站&#xff08;SSL证书_域名ssl证书 - CTI华测检测官方商城&#xff09;申请 SSL 证书后&#xff0c;您将会收到一个压缩文件。该压缩文件包含四种证书格式&#xff0c;分别为&#xff1a;Tomcat、Nginx、IIS、Apache。其中&#xff0c;在 …

Docker 部署MongoDb

1. 编写docker-compose.conf 文件 version: 3 services:mongo:image: mongo:latest # 指定 MongoDB 版本&#xff0c;确保 > 3.6container_name: mongo-replicarestart: alwayscommand: ["mongod", "--replSet", "rs0", "--oplogSize&…

告别局域网限制:宝塔FTP结合内网穿透工具实现远程高效文件传输

文章目录 前言1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 前言 本文主要介绍宝塔FTP文件传输服务如何搭配内网穿透工具&#xff0c;实现随时随地远程连接局域网环境搭建的宝塔FTP文件服务并进行文件…

Qt/C++地图雷达扫描/动态扇形区域/标记线实时移动/轮船货轮动态轨迹/雷达模拟/跟随地图缩放

一、前言说明 地图雷达扫描的需求场景也不少&#xff0c;很多人的做法是直接搞个覆盖层widget&#xff0c;在widget上绘制雷达&#xff0c;优缺点很明显&#xff0c;优点是性能高&#xff0c;毕竟直接在widget上绘制性能明显比js中绘制要高&#xff0c;缺点是要么动态计算经纬…

Springboot集成阿里云通义千问(灵积模型)

我这里集成后&#xff0c;做成了一个工具jar包&#xff0c;如果有不同方式的&#xff0c;欢迎大家讨论&#xff0c;共同进步。 集成限制&#xff1a; 1、灵积模型有QPM(QPS)限制&#xff0c;每个模型不一样&#xff0c;需要根据每个模型适配 集成开发思路&#xff1a; 因有…