LeetCode刷题6:二叉树篇之第 1 节

提示1:本篇先带大家了解二叉树的基础理论,后给出4道基础题目,不难,冲啊~

算法刷题系列

  • LeetCode刷题1:数组篇
  • LeetCode刷题2:链表篇
  • LeetCode刷题3:哈希篇
  • LeetCode刷题4:字符串篇
  • LeetCode刷题5:栈与队列篇

文章目录

  • 算法刷题系列
  • 作者有话说
  • 一、二叉树的种类
    • 1.1 满二叉树
    • 1.2 完全二叉树
    • 1.3 二叉搜索树
    • 1.4 平衡二叉搜索树
  • 二、二叉树的遍历
    • 2.1 深度优先遍历
    • 2.2 广度优先遍历
  • 三、经典题目
    • 3.1 LeetCode144. 二叉树的前序遍历
    • 3.2 LeetCode94. 二叉树的中序遍历
    • 3.3 LeetCode145. 二叉树的后序遍历
    • 3.4 LeetCode226. 翻转二叉树
  • 总结


作者有话说

  本篇是算法刷题系列文章的第 6,从这里开始我们就要进入到了 二叉树 章节,关于 二叉树 章节我们要学的东西很多,包括:二叉树的遍历方式(前中后)、二叉树的属性、二叉树的修改与构造、求二叉搜索树的属性、二叉树公共祖先问题、二叉搜索树的修改与构造。 这一系列难度逐步上升,大家也要不离不弃一直追更啊!


一、二叉树的种类

  二叉树就是每一个节点最多只有两个子节点的数,如下图所示。
在这里插入图片描述

1.1 满二叉树

  如果一棵二叉树 只有度为0的结点和度为2的结点,并且度为0的结点在同一层上 ,则这棵二叉树为满二叉树【注】:度是指树中所以结点的度数的最大值。
在这里插入图片描述

1.2 完全二叉树

  在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2 h − 1 2^{h-1} 2h1 个节点。如下图所示。
在这里插入图片描述

1.3 二叉搜索树

  二叉搜索树是带有数值的树,二叉搜索树是一个有序树。具有以下性质。

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树

在这里插入图片描述

1.4 平衡二叉搜索树

  平衡二叉搜索树又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 如下图所示。
在这里插入图片描述

二、二叉树的遍历

2.1 深度优先遍历

  先往深走,遇到叶子节点再往回走。一共有三种方式:前序遍历;中序遍历;后序遍历。

  • 前序遍历: 根 —> 左 —> 右
  • 中序遍历: 左 —> 根 —> 右
  • 后序遍历: 左 —> 右 —> 根

2.2 广度优先遍历

  一层一层的去遍历,如下图所示。
在这里插入图片描述

三、经典题目

3.1 LeetCode144. 二叉树的前序遍历

  • 原题地址:144. 二叉树的前序遍历
  • 题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
  • 解题思路: 根 —> 左 —> 右
  • 代码如下:
class Solution:
    def Traversal(self, root, res):
        if root == None:
            return
        res.append(root.val)
        self.Traversal(root.left, res)
        self.Traversal(root.right, res)
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 保存结果
        result = []
        self.Traversal(root, result)
        return result

3.2 LeetCode94. 二叉树的中序遍历

  • 原题地址:94. 二叉树的中序遍历
  • 题目描述: 给你二叉树的根节点 root ,返回它节点值的 中序 遍历。
  • 解题思路: 左 —> 根 —> 右
  • 代码如下:
class Solution:
    def Traversal(self, root, res):
        if root == None:
            return 0
        self.Traversal(root.left, res)
        res.append(root.val)
        self.Traversal(root.right, res)
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        self.Traversal(root, result)
        return result

3.3 LeetCode145. 二叉树的后序遍历

  • 原题地址:145. 二叉树的后序遍历
  • 题目描述: 给你二叉树的根节点 root ,返回它节点值的 后序 遍历。
  • 解题思路: 左 —> 右 —> 根
  • 代码如下:
class Solution:
    def Traversal(self, root, res):
        if root == None:
            return 0
        self.Traversal(root.left, res)
        self.Traversal(root.right, res)
        res.append(root.val)
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        self.Traversal(root, result)
        return result

3.4 LeetCode226. 翻转二叉树

  • 原题地址:226. 翻转二叉树
  • 题目描述: 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
    在这里插入图片描述
  • 解题思路: 想要翻转二叉树,其实就把每一个节点的左右孩子交换一下就可以了。
  • 代码如下:
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root:
            return None
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root

总结

  本博客只是二叉树篇的第一小节,由于该部分题目较多,还请大家持续关注呀。

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

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

相关文章

1678_计算机架构黄金时代_文章阅读

全部学习汇总: GreyZhang/g_risc_v: Learning notes about RISC V. (github.com) 看了一份几年前的文章,觉得还是挺有收获的,因此做一个简单的整理。 对于架构有很大影响的主要考虑四点:专用硬件的实现、高安全性的要求、开放指令…

【Pandas】① Pandas 数据处理基础

介绍 Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。除此之外,Pandas 拥有强大的缺失数据处理与数据透视功能,可谓是数据预处理中的必备利器。 知识点 数据类型数据读取数据选择…

有效的括号(力扣刷题)代码随想录刷题

给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左…

RK3568平台开发系列讲解(驱动基础篇)mmap系统调用详解

🚀返回专栏总目录 文章目录 一、什么是mmap二、mmap映射类型2.1、私有匿名映射2.2、私有文件映射2.3、共享文件映射2.4、共享匿名映射沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将详细介绍mmap系统调用。 一、什么是mmap mmap/munmap函数是用户空间中常用的…

Nacos 性能报告

目录 一、测试目的 二、测试工具 三、测试环境 1. 环境 服务端 客户端 2. 启动参数 服务端 客户端 四、测试场景 1. 大规模服务注册后达到稳定状态 场景描述 2. 大规模服务注册达到稳定状态后,部分实例频繁发布 场景描述 五、测试数据 1. 大规模服务…

软件测试基础

软件测试的定义、软件测试的目的 IEEE:The process of running or testing the system manually or automatically by using tools, in order to verify whether it satisfies the requirements or to make clear the differences between the actual outcome and…

DDoS攻击实验笔记

DoS&DDoS简介 DoS(Denial of Service),拒绝服务攻击是通过一些方法影响服务的可用性,比如早期主要基于系统和应用程序的漏洞,只需要几个请求或数据包就能导致长时间的服务不可用,但易被入侵检测系统发现。 DDoS(Distributed D…

日撸 Java 三百行day28-30

文章目录说明day28-30 Huffman 编码 (节点定义与文件读取)1.建树过程(以图为例)2.哈夫曼树特点3.分析代码过程3.1 抽象成员变量3.2结合文章梳理思路1.读文本2.解析文本内容:3.建树4.生成哈夫曼编码5.编码6.解码4.其他4.1 java 类型强转4.2 ja…

linux线程调度策略

系统中既有分时调度,又有时间片轮转调度和先进先出调度 学习这个主要为了在linux多线程中,解决几条指令间延时在1-2ms内; 1.比如之前处理过:给一个板子发送一个can指令,接着需要给另外一个模块发送移动指令&#xff0c…

用ChatGPT怎么赚钱?普通人用这5个方法也能赚到生活费

ChatGPT在互联网火得一塌糊涂,因为它可以帮很多人解决问题。比如:帮编辑人员写文章,还可以替代程序员写代码,帮策划人员写文案策划等等。ChatGPT这么厉害,能否用它来赚钱呢?今天和大家分享用ChatGPT赚钱的5…

关键词数据分析-搜索词和关键词分析工具

要搜索热门关键词获取,可以采用以下几种方法: 使用百度指数:百度指数是一个实用的工具,可用于查看关键词的热度趋势、搜索量等数据。在百度指数中,您可以输入您要搜索的关键词,并查看近期的相关数据。这可以…

短视频矩阵怎么玩?抖音短视频矩阵运营详细攻略!

短视频矩阵的工作包括确定目标受众和平台、制定短视频内容策、短视频制作与发布,私信评论维护,短视频数据分析等。传统短视频矩阵需要大量的人力物力,操作起来比较复杂,使用短视频矩阵工具则可以提供极大的便利。      1、确定…

Vue项目中关于全局css的处理

Vue项目中关于全局css的处理步骤一:定义声明全局CSS的样式文件(common.scss)步骤二:挂载到全局封装一:对common.scss拆分封装二:新建index.scss,对elementPlus或者element-ui样式进行覆盖封装三:variable.s…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好,我是CSDN的拿我格子衫来, 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦,这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜,最终开花结果。感触良多,今天就借这篇文章来谈一谈这本书的…

Java基础(十五):异常处理

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

Linux内核设备驱动设备树概念与使用

一、设备树概念以及作用 1.1设备树概念 设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的文件叫做 DTS(DeviceTree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比…

python入门:cl.exe‘ failed with exit status 2错误通用解决方案

文章目录 错误一错误二pypi.org独立安装正确安装错误一 error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 这个错误在windows系统上安装python工…

Spring《三》DI依赖注入

🍎道阻且长,行则将至。🍓 上一篇:Spring《二》bean的实例化与生命周期 下一篇:敬请期待 目录一、setter注入🍉1.注入引用数据类型2.注入简单数据类型二、构造器注入🍊1.注入引用数据类型2.简单数…

Spring 源码分析(二)——GenericBeanDefinition 分析

BeanDefinition 中存储着 Bean 的定义信息,它具有属性值、构造函数参数值以及具体实现 Bean 提供的进一步信息,在学习 Spring 的 Bean 初始化流程之前,还是非常有必要先了解一下 BeanDefinition。 一、注册 Bean 示例 首先,本文…

SpringCloud微服务技术栈之网关服务Gateway

文章目录SpringCloud微服务技术栈之网关服务Gateway前言网关服务Gateway的基本概念Gateway的体系结构Gateway的主要功能网关服务Gateway的架构设计架构设计方案示例代码网关服务Gateway的实践操作1. 创建工程2. 配置路由规则3. 实现过滤器4. 集成服务注册中心5. 启动网关服务器…