二叉树理论基础篇

server/2024/12/18 7:57:29/

这里写目录标题

    • 二叉树的种类
      • **满二叉树(Full Binary Tree)**
      • **完全二叉树(Complete Binary Tree)**
      • **二叉搜索树(Binary Search Tree,BST)**
      • 平衡二叉搜索树
    • 二叉树的存储方式
    • 二叉树的遍历方式
    • 二叉树的定义

二叉树的种类

满二叉树(Full Binary Tree)

  • 每个节点要么是叶子节点(没有子节点),要么有两个子节点。
  • 即每个非叶子节点都有两个子节点。

完全二叉树(Complete Binary Tree)

  • 除了最底层,其他层的节点都填满了,并且最底层的节点从左到右填充。
  • 最底层的节点可以有0到2个子节点,但必须从左到右排列。

之前我们刚刚讲过优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。

二叉搜索树(Binary Search Tree,BST)

  • 对于任意一个节点,左子树所有节点的值小于该节点的值,右子树所有节点的值大于该节点的值。递归满足这个要求。对于树没有要求。
  • 这使得二叉搜索树在进行查找、插入和删除操作时具有较好的性能。

平衡二叉搜索树

具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。

二叉树的存储方式

二叉树可以链式存储,也可以顺序存储。

那么链式存储方式就用指针, 顺序存储的方式就是用数组。

顾名思义就是顺序存储的元素在内存是连续分布的,而链式存储则是通过指针把分布在各个地址的节点串联一起。

二叉树的遍历方式

一些同学用做了很多二叉树的题目了,可能知道前中后序遍历,可能知道层序遍历,但是却没有框架。

我这里把二叉树的几种遍历方式列出来,大家就可以一一串起来了。

二叉树主要有两种遍历方式:

  • 深度优先遍历:先往深走,遇到叶子节点再往回走。
  • 广度优先遍历:一层一层的去遍历。

在深度优先遍历中:有三个顺序,前中后序遍历, 有同学总分不清这三个顺序,经常搞混,我这里教大家一个技巧。这里前中后,其实指的就是中间节点的遍历顺序,只要大家记住 前中后序指的就是中间节点的位置就可以了。

二叉树的定义

刚刚我们说过了二叉树有两种存储方式顺序存储,和链式存储,顺序存储就是用数组来存,这个定义没啥可说的,我们来看看链式存储的二叉树节点的定义方式。

C++代码如下:

struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

大家会发现二叉树的定义 和链表是差不多的,相对于链表 ,二叉树的节点里多了一个指针, 有两个指针,指向左右孩子。

在这里插入图片描述


http://www.ppmy.cn/server/151120.html

相关文章

Python中工具脚本在本地共享给不同项目

哈喽,大家好,我是木头左! 在软件开发过程中,经常遇到需要在多个项目中共享工具脚本的情况。例如,数据处理脚本、自动化测试脚本或者通用的实用函数库等。这些工具脚本可以在不同项目中重复使用,从而减少开发时间,提高代码一致性和可维护性。然而,如何有效地管理和共享这…

项目17:简易文字冒险小游戏 --- 《跟着小王学Python·新手》

项目17:简易文字冒险小游戏 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌…

MySQL其五,索引详解,逻辑架构,SQL优化等概念

目录 一、索引 1、索引的概念 2、索引的优缺点 3、添加索引的原则 4、索引的分类 5、索引如何使用 6、存储过程讲解 7、测试索引的效率 7、索引的数据结构 8、覆盖索引(SQL优化的点) 9、最佳左前缀法则(SQL优化的点) 二…

Spring Boot用两种方式访问JSP资源

文章目录 1. Spring Boot展现层2. 创建Spring Boot项目2.1 创建项目2.2 添加依赖支持JSP与JSTL2.3 创建问候控制器3. 采用配置类方式访问JSP页面3.1 创建目录以及页面3.2 创建配置类定义内部资源视图解析器3.3 启动应用,查看结果4. 采用设置应用属性方式4.1 配置视图前后缀属性…

ArcGIS;InVEST实践;生物多样性生境质量模型、固碳模块、城市热岛缓解(降温)模块

以InVEST模型结合实际项目进行由浅入深的实战技术讲解,针对学者的特点及需求进行分析,融合内容体系,对接工作实际项目及论文写作,解决参会者关注的重点及实际项目过程问题,采取逐步延伸的逻辑,不论您是小白…

从Servlet到Spring MVC,从Spring MVC到Spring BootC

从Servlet到Spring MVC 文章目录 从Servlet到Spring MVCServlet服务端的Java应用程序MVC设计模式 Servlet服务端的Java应用程序 Servlet是一种独立于操作系统平台和网络传输协议的服务端的Java应用程序,他用来扩展服务器的功能,可以生成动态的Web页面。…

k8s+rancher配置滚动发布更新时服务不可用

问题 配置完了k8s优雅下线后,发现配置了滚动发布后,两个服务同时在running状态,其中旧服务开始下线会导致有三四秒的时间调用该服务的接口会负载均衡到该服务,接口调用就会报错服务异常。 经排查,具体原因是服务虽然…

STM32内部flash分区

STM32的内部Flash根据型号和容量的不同,分区方式可能有所差异,但通常都包含以下几个主要部分: 主存储器:这是内部Flash的主要部分,用于存放程序代码和数据常量。在STM32F4系列中,主存储器被划分为多个扇区…