代码随想录算法训练营day19 | 二叉树阶段性总结
各个部分题目的代码题解都在我往日的二叉树的博客中。
(day14到day22)
目录
- 二叉树理论基础
- 二叉树的遍历方式
- 深度优先遍历
- 广度优先遍历
- 求二叉树的属性
- 二叉树的修改与制造
- 求二叉搜索树的属性
- 二叉树公共最先问题
- 二叉搜索树的修改与构造
- 总结
二叉树理论基础
二叉树的理论基础参考我的朱提第一篇二叉树的文章:
链接: day14
得注意各种二叉树的种类、存储方式、遍历方式、定义方式。
二叉树的遍历方式
深度优先遍历
链接: day14
二叉树前中后序的递归三部曲
二叉树前中后序的迭代法
二叉树前中后序的迭代法的统一形式
广度优先遍历
链接: day15
二叉树的层序遍历
求二叉树的属性
- 二叉树:是否对称
递归:后序,比较的是根节点的左子树与右子树是不是相互翻转
迭代:使用队列/栈将两个节点顺序放入容器中进行比较 - 二叉树:求最大深度
递归:后序,求根节点最大高度就是最大深度,通过递归函数的返回值做计算树的高度
迭代:层序遍历 - 二叉树:求最小深度
递归:后序,求根节点最小高度就是最小深度,注意最小深度的定义
迭代:层序遍历 - 二叉树:求有多少个节点
递归:后序,通过递归函数的返回值计算节点数量
迭代:层序遍历 - 二叉树:是否平衡
递归:后序,注意后序求高度和前序求深度,递归过程判断高度差
迭代:效率很低,不推荐 - 二叉树:找所有路径
递归:前序,方便让父节点指向子节点,涉及回溯处理根节点到叶子的所有路径
迭代:一个栈模拟递归,一个栈来存放对应的遍历路径 - 二叉树:递归中如何隐藏着回溯
详解二叉树:找所有路径 中递归如何隐藏着回溯 - 二叉树:求左叶子之和
递归:后序,必须三层约束条件,才能判断是否是左叶子。
迭代:直接模拟后序遍历 - 二叉树:求左下角的值
递归:顺序无所谓,优先左孩子搜索,同时找深度最大的叶子节点。
迭代:层序遍历找最后一行最左边 - 二叉树:求路径总和
递归:顺序无所谓,递归函数返回值为bool类型是为了搜索一条边,没有返回值是搜索整棵树。
迭代:栈里元素不仅要记录节点指针,还要记录从头结点到该节点的路径数值总和
二叉树的修改与制造
- 翻转二叉树
递归:前序,交换左右孩子
迭代:直接模拟前序遍历 - 构造二叉树
递归:前序,重点在于找分割点,分左右区间构造
迭代:比较复杂,意义不大 - 构造最大的二叉树
递归:前序,分割点为数组最大值,分左右区间构造
迭代:比较复杂,意义不大 - 合并两个二叉树
递归:前序,同时操作两个树的节点,注意合并的规则
迭代:使用队列,类似层序遍历
求二叉搜索树的属性
- 二叉搜索树中的搜索
递归:二叉搜索树的递归是有方向的
迭代:因为有方向,所以迭代法很简单 - 是不是二叉搜索树
递归:中序,相当于变成了判断一个序列是不是递增的
迭代:模拟中序,逻辑相同 - 求二叉搜索树的最小绝对差
递归:中序,双指针操作
迭代:模拟中序,逻辑相同 - 求二叉搜索树的众数
递归:中序,清空结果集的技巧,遍历一遍便可求众数集合 - 二叉搜索树转成累加树
递归:中序,双指针操作累加
迭代:模拟中序,逻辑相同
二叉树公共最先问题
- 二叉树的公共祖先问题
递归:后序,回溯,找到左子树出现目标值,右子树节点目标值的节点。
迭代:不适合模拟回溯 - 二叉搜索树的公共祖先问题
递归:顺序无所谓,如果节点的数值在目标区间就是最近公共祖先
迭代:按序遍历
二叉搜索树的修改与构造
- 二叉搜索树中的插入操作
递归:顺序无所谓,通过递归函数返回值添加节点
迭代:按序遍历,需要记录插入父节点,这样才能做插入操作 - 二叉搜索树中的删除操作
递归:前序,想清楚删除非叶子节点的情况
迭代:有序遍历,较复杂
修剪二叉搜索树
递归:前序,通过递归函数返回值删除节点
迭代:有序遍历,较复杂 - 构造二叉搜索树
递归:前序,数组中间节点分割
迭代:较复杂,通过三个队列来模拟
总结
涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。
求普通二叉树的属性,一般是后序,一般要通过递归函数的返回值做计算。
求二叉搜索树的属性,一定是中序。
注意在普通二叉树的属性中,我用的是一般为后序,例如单纯求深度就用前序,【二叉树:找所有路径】也用了前序,这是为了方便让父节点指向子节点。
所以求普通二叉树的属性还是要具体问题具体分析。
参考文档:
链接: 二叉树总结
相关文章:
代码随想录算法训练营day19 | 二叉树阶段性总结
各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...

数据库引论:3、中级SQL
一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join,自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1,A2,⋯):使用括号里的属性进行自然连接,除了这些属性之外的共同…...

毕业设计:日志记录编写(3/17起更新中)
目录 3/171.配置阿里云python加速镜像:2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标:构建基本的python环境:运行爬虫程序 1.配置阿里云pytho…...

(一)基于IDEA的JAVA基础7
关系运算符 运算符 含义 范例 结果 等于 12 false ! 不等于 1!2 true > 大于 1>2 false < 小于 …...

MySQL数据库概念及MySQL的安装
文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统(DBMS)4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能(数据库与外界对接࿰…...

redis实际应用场景及并发问题的解决
业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候,有千分之三的概率掉落金币,每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群(这个要求暂时不实现) 编写接口&…...

考研数学|汤家凤《1800》基础部分什么时候做完?
从我个人的经验来看,做完汤家凤1800的基础部分在第一轮复习中并不是必须的,但是可以作为一个有效的复习工具。 我认为汤家凤1800的基础部分确实涵盖了考研高数的基础知识点,并且题目难度适中,适合用来巩固基础。在第一轮复习中&a…...
JS的设计模式(23种)
JavaScript设计模式是指在JavaScript编程中普遍应用的一系列经过验证的最佳实践和可重用的解决方案模板,它们用来解决在软件设计中频繁出现的问题,如对象的创建、职责分配、对象间通信以及系统架构等。 设计模式并不特指某个具体的代码片段,…...

[自研开源] MyData v0.7.5 更新日志
开源地址:gitee | github 详细介绍:MyData 基于 Web API 的数据集成平台 部署文档:用 Docker 部署 MyData 使用手册:MyData 使用手册 试用体验:https://demo.mydata.work 交流Q群:430089673 介绍 MyData …...

3月份的倒数第二个周末有感
坐在图书馆的那一刻,忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成,所以就选了嘉定图书馆,不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光,那是多么美好且短暂的时光。凝视着窗…...
Java 变得越来越像 Rust
Java 变得越来越像 Rust 介绍 随着编程的增强和复杂性越来越流行,许多编程语言也相互效仿。 Java 也不例外。 尽管社区内部存在问题,Rust 仍逐年赢得了开发人员的喜爱。并且有充分的理由:由于编译器,Rust 使开发人员能够避免整…...
通过git bash 或命令行ssh访问服务器 sftp上传下载文件
上传下载文件 sftp -P 端口 appywIP 示例:sftp -P 10022 appyw25.222.133.222 然后输入密码即可 ls 查看文件 lls 查看本地文件 cd 跳转 lcd 本地跳转 get ... 下载文件 put 本地文件名 远程文件夹 //上传文件 put -r 本地文件夹 远程文件夹 //上传文件夹服务器…...

27 OpenCV 凸包
文章目录 概念Graham扫描算法convexHull 凸包函数示例 概念 什么是凸包(Convex Hull),在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义: 包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选择Y方向最低…...

【GPT概念04】仅解码器(only decode)模型的解码策略
一、说明 在我之前的博客中,我们研究了关于生成式预训练转换器的整个概述,以及一篇关于生成式预训练转换器(GPT)的博客——预训练、微调和不同的用例应用。现在让我们看看所有仅解码器模型的解码策略是什么。 二、解码策略 在之前…...
蔚来-安全开发一面/二面
基本不怎么会渗透测试,本科期间有过大数据隐私保护(密码)的项目,硕士期间有个华为合作的项目一篇在投的ai安全论文 一面(45min) 1.介绍自己 2.介绍一下实习 3.场景题轰炸,主要针对实习中的场景,主要考察…...
Redis Cluster集群模式容器化部署
Redis Cluster集群模式容器化部署 安装Docker和docker-compose准备docker-compose文件准备Redis配置文件Linux内核参数优化启停Redis实例Redis集群搭建 环境准备: IP版本角色端口172.x.x.11RHEL 7.9master6379172.x.x.12RHEL 7.9master6379172.x.x.13RHEL 7.9maste…...

网络原理(6)——IP协议
目录 一、网段划分 现在的网络划分: 1、一般情况下的家庭网络环境 2、IP地址 3、子网掩码 4、网关 以前的网络划分: 二、特殊IP 1、环回 IP 2、主机号为全 0 的IP 3、广播地址IP 三、路由选择(路线规划) 一、网段划分…...

淘宝商品详情API接口:快速获取商品信息的高效工具
淘宝商品详情API接口:快速获取商品信息的高效工具 请求示例,API接口接入Anzexi58 在信息化、数字化的今天,数据已成为商业决策的重要依据。对于电商行业而言,快速准确地获取商品信息对于商家和消费者都至关重要。淘宝作为中国最大…...

一分钟学习Markdown语法
title: 一分钟学习Markdown语法 date: 2024/3/24 19:33:29 updated: 2024/3/24 19:33:29 tags: MD语法文本样式列表结构链接插入图片展示练习实践链接问题 欢迎来到Markdown语法的世界!Markdown是一种简单而直观的标记语言,让文本排版变得轻松有趣。接下…...
Power Apps 学习笔记 -- OrganizationRequestCollection
文章目录 1. OrganizationRequestCollection 简介2. OrganizationRequestCollection2.1 OrganizationRequest 使用2.2 OrganizationRequestCollection 使用 1. OrganizationRequestCollection 简介 OrganizationRequestCollection 链接 : OrganizationRequestCollection Orga…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...
Python爬虫(四):PyQuery 框架
PyQuery 框架详解与对比 BeautifulSoup 第一部分:PyQuery 框架介绍 1. PyQuery 是什么? PyQuery 是一个 Python 的 HTML/XML 解析库,它采用了 jQuery 的语法风格,让开发者能够用类似前端 jQuery 的方式处理文档解析。它的核心特…...

大话软工笔记—架构模型
1. 架构模型1—拓扑图 (1)拓扑图概念 拓扑图,将多个软件系统用网络图连接起来的表达方式。 (2)拓扑图分类 总线型结构 比较普遍采用的方式,将所有的系统接到一条总线上。 星状结构 各个系统通过点到…...

《校园生活平台从 0 到 1 的搭建》第一篇:创建项目与构建目录结构
在本系列第一篇中,我们将从项目初始化开始,搭建基本的目录结构,并完成四个主页面的创建与 TabBar 设置。 (tip:你可能会觉得有点 ai 化,因为这个文案是我自己写了一遍文案之后让 ai 去优化输出的࿰…...
零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析!
🌟 零基础入门 C 语言基础知识(含面试题):结构体、联合体、枚举、链表、环形队列、指针全解析! C 语言是所有程序员通向“系统世界”的第一把钥匙。很多嵌入式开发、操作系统内核、网络通信、图形引擎,背后…...