二叉树基础知识总结

目录

二叉树基础知识

概念 : 

根节点的五个形态 : 

特殊的二叉树

满二叉树 : 

 完全二叉树 : 

二叉搜索树  :

平衡二叉搜索树 : 

二叉树的性质 : 

二叉树的存储结构

二叉树的顺序存储结构

二叉树的链式存储结构

 二叉树的遍历方式 : 

基础概念

前中后遍历

 层序遍历 : 


二叉树基础知识

概念 : 

二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。

根节点的五个形态 : 

  1. 空二叉树

  2. 只有一个根结点

  3. 根结点只有左子树

  4. 根结点只有右子树

  5. 根结点既有左子树又有右子树

特殊的二叉树

满二叉树 : 

概念 : 

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

图例 : 

 完全二叉树 : 

概念 : 

        在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(h从1开始),则该层包含 1~ 2^(h-1) 个节点。

图例 : 

 而

 这个就不是一颗完全二叉树!

二叉搜索树  :

前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树

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

下面的就是一颗二叉搜索树;

 二叉搜索树最大的特点就是左<父<右 ;

平衡二叉搜索树 : 

又被称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

其中c++中的map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn , 而unordered_map、unordered_set,unordered_map、unordered_set底层实现是哈希表。

二叉树的性质 : 

  1. 二叉树的第i层上至多有2 ^ (i-1)(i≥1)个节点。

  2. 深度为h的二叉树中至多含有2^h-1个节点

  3. 若在任意一棵二叉树中,有 n0 个叶子节点,有 n2 个度为2的节点,则必有n0 = n2 + 1

  4. 具有n个节点的完全二叉树深为log2(x) + 1(其中x表示不大于n的最大整数)

  5. 若对一棵有n个节点的完全二叉树进行顺序编号(1<=i<=n),那么,对于编号为i(i>=1)的节点:

    ⑴i =1 时,该节点为根,它无双亲节点 。

    ⑵ i > 1 时,该节点的双亲节点的编号为i/2 。

    ⑶2i<= n,则有编号为2i的左节点,否则没有左节点 。

    ⑷2i+1<=n ,则有编号为2i+1的右节点,否则没有右节点 。

二叉树的存储结构

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

二叉树的顺序存储结构

二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等。

如以下这颗完全二叉树 : 

 可以采用以下线性表来存储:

下标12345678910
数据ABCDEFGHIJ

 如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

二叉树的链式存储结构

在链式结构中,一个二叉树的结点包含左孩子指针,数据,右孩子指针 ;

链式存储效果如图 : 

二叉链表的结构体定义 : 


typedef struct BiTNode
{TElemType data;  //数据域struct BiTNode *lchild,*rchild; //指针域
}BiTNode,*BiTree;

 二叉树的遍历方式 : 

基础概念

首先,主要的两种遍历方式为 : 

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

这两种遍历方法又可以细分 : 

  • 深度优先遍历
    • 前序遍历(递归法,迭代法)
    • 中序遍历(递归法,迭代法)
    • 后序遍历(递归法,迭代法)
  • 广度优先遍历
    • 层次遍历(迭代法)

前中后遍历

其中前中后三种结点的遍历顺序 如下 :

  • 前序遍历:中左右
  • 中序遍历:左中右
  • 后序遍历:左右中

图例 : 

 层序遍历 : 

从树的第一层开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问 ;

如下图 : 

 层序遍历的结果为 : 

ABCDEFGHI 

参考 : 

  1. 《大话数据结构》

  2. 《数据结构》C语言版(清华严蔚敏考研版)

  3. 【数据结构与算法】二叉树

  4. 代码随想录

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理

一、缓存穿透 1、概念 缓存穿透&#xff08;查不到数据&#xff09;&#xff0c;是指当用户想要查询数据的时候&#xff0c;会先去Redis中取命中&#xff0c;如果Redis中没有该数据&#xff0c;那么就会向数据库中去查找数据。如果数据库中也没有&#xff0c;则该次查询结果失…

Spring学习笔记(五)--Spring的AOP模块

一、AOP的底层原理 AOP的底层原理是动态代理&#xff0c;动态代理有两种方式&#xff1a;JDK动态代理和CGLib动态代理&#xff0c;在有接口的实现类时我们通常用JDK的动态代理方式&#xff08;默认情况&#xff09;为类创建代理对象&#xff0c;JDK的动态代理方式可以实现无入…

ORM中常用的字段和参数,正反向概念

django表查询测试环境搭建 首先&#xff0c;在此之前我们先来回顾一下之前学习的orm内容 1. django自带一个小型的sqlite3的小型数据库 但是这个数据库的功能非常有限&#xff0c;并且针对日期类型的数据兼容性很差 2. 切换数据库数据(MySQL) 2.1 在django1.x版本中你需要在_…

PotPlayer+Alist挂载并播放网盘视频

文章目录 说明技术WebDAVPotPlayer 操作步骤一&#xff1a;Alist开启WebDAV代理二&#xff1a;PotPlayer连接Alist 说明 Alist网页端播放视频受限&#xff0c;主要是文件大于20MB&#xff0c;由于官方限制&#xff0c;无法播放需要使用user-agent修改插件&#xff0c;设置百度…

《最新出炉》系列初窥篇-Python+Playwright自动化测试-24-处理单选和多选按钮-上篇

1.简介 在工作和生活中&#xff0c;经常会遇到我们需要进行选择的情况&#xff0c;比如勾选我们选择性别&#xff0c;男女两个性别总是不能同时选中的&#xff0c;再比如我们在选择兴趣爱好时&#xff0c;我们可以选择多个自己感兴趣的话题&#xff0c;比如&#xff1a;篮球、…

sqllabs第46关 order by 注入

简介&#xff1a;&#xff08;order by注入-错误回显-POST注入&#xff09; 请求方法&#xff1a;POST 方法&#xff1a;order by注入错误回显数字型注入 先了解下 order by参数注入&#xff1a; order by 注入是指其后面的参数是可控的&#xff0c; order by 不同于我们在 whe…

gem5学习(23):经典缓存——Classic Caches

目录 一、Interconnects 1、Crossbars 二、Debugging 官网教程&#xff1a;gem5: Classic caches 默认缓存是一个带有MSHR&#xff08;未命中状态保持寄存器&#xff09;和WB&#xff08;写缓冲区&#xff09;的非阻塞缓存&#xff0c;用于读取和写入未命中。缓存还可以启用…

[java基础揉碎]this

引出this: 什么是this: java虚拟机会给每个对象分配 this&#xff0c;代表当前对象。 这里的this就是new出来的这个对象 this的本质: this是个引用在堆中指向它自己: this的细节: 访问成员方法: 访问构造器:

精英ECS Z97-MACHINE V1.0 BIOS MX25L6406E

官网上的两个BIOS我都无法亮机&#xff0c;这是我保存出来的BIOS&#xff0c;不知道是否能使用五代的处理器 官网&#xff1a;Z97-MACHINE&#xff5c;Motherboard&#xff5c;产品&#xff5c;ECS 精英电脑 国外老哥的看法&#xff1a;ECS Z97-MACHINE Closer Look: The BIO…

RocketMQ-架构与设计

RocketMQ架构与设计 一、简介二、框架概述1.设计特点 三、架构图1.Producer2.Consumer3.NameServer4.BrokerServer 四、基本特性1.消息顺序性1.1 全局顺序1.2 分区顺序 2.消息回溯3.消息重投4.消息重试5.延迟队列&#xff08;定时消息&#xff09;6.重试队列7.死信队列8.消息语…

【电子书】游戏开发

资料 wx&#xff1a;1945423050 整理了一些互联网电子书&#xff0c;推荐给大家 游戏开发 ADOBE FLASH PROFESSIONAL CS6 标准培训教材.epubAndroid 3D 游戏案例开发大全.epubCocos Creator游戏开发实战.epubCocos2D-X游戏开发技术精解.epubCocos2d-JS游戏开发快速入门到实战…

《Python 语音转换简易速速上手小册》第3章 文本到语音的转换(2024 最新版)

文章目录 3.1 文本到语音的原理3.1.1 基础知识3.1.2 主要案例&#xff1a;自动新闻播报器案例介绍案例 Demo案例分析 3.1.3 扩展案例 1&#xff1a;智能助手案例介绍案例 Demo案例分析 3.1.4 扩展案例 2&#xff1a;电子书阅读器案例介绍案例 Demo案例分析 3.2 Python 中的文本…

python 验证AES_ECB算法对数据的加解密

目录 一、python 代码实现如下&#xff1a; 二、代码解析 三、运行结果 一、python 代码实现如下&#xff1a; #AES_ECB模式实现 from Crypto.Cipher import AES from Crypto.Random import get_random_bytes # 自动生成密钥 from Crypto.Util.Padding import pad, unpad …

开开开开开,干

大家新年快乐&#xff0c;开工啦啦啦啦 其实每天很多人都会问&#xff1a; 有协同过滤的算法吗&#xff0c;有的&#xff0c;可以给你解释原理… 有的小伙伴只开了一部分逻辑&#xff0c;我要实现用户可以下单功能 但是细细考虑下单&#xff0c;需要现有用户&#xff0c;维护…

为全志D1开发板移植LVGL日历控件和显示天气

利用TCP封装HTTP包请求天气信息 Linux还真是逐步熟悉中&#xff0c;现在才了解到Linux即没有原生的GUI&#xff0c;也没有应用层协议栈&#xff0c;所以要实现HTTP应用&#xff0c;必须利用TCP然后自己封装HTTP数据包。本篇即记录封装HTTP数据包&#xff0c;到心知天气请求天气…

Flutter Slider自定义滑块样式 Slider的label标签框常显示

1、自定义Slider滑块样式 Flutter Slider控件的滑块系统样式是一个圆点&#xff0c;thumbShape默认样式是RoundSliderThumbShape&#xff0c;如果想要使用其它的样式就需要自定义一下thumbShape&#xff1b; 例如需要一个上图样式的&#xff08;圆点半透明圆形边框&#xff09…

2024年天津高考数学备考:历年选择题真题练一练(2014~2023)

距离2024年高考还有不到四个月的时间&#xff0c;今天我们来看一下2014~2023年的天津市高考数学的选择题&#xff0c;从过去十年的真题中随机抽取5道题&#xff0c;并且提供解析。后附六分成长独家制作的在线练习集&#xff0c;科学、高效地反复刷这些真题&#xff0c;吃透真题…

ELK入门(四)-logstash

Logstash Logstash 是开源的服务器端数据处理管道&#xff0c;能够同时从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的存储库中。 Logstash 能够动态地采集、转换和传输数据&#xff0c;不受格式或复杂度的影响。利用 Grok 从非结构化数据中…

打造纯Lua组件化开发模式:Unity xLua框架详解

在传统的Unity开发中&#xff0c;通常会使用C#来编写游戏逻辑和组件。但是&#xff0c;随着Lua在游戏开发中的应用越来越广泛&#xff0c;我们可以将游戏逻辑和组件完全用Lua来实现&#xff0c;实现纯Lua的组件化开发模式。这样做的好处是可以更加灵活地修改游戏逻辑&#xff0…

uni-app 开发调试自动打开手机屏幕大小界面(Aidex移动端开发项目)

上效果&#xff1a; 下载Aidex的移动端项目并打开&#xff1a; 若依-ruoyi-AiDex-Uniapp: 若依-Ruoyi APP 移动解决方案&#xff0c;基于uniappuView封装的一套基础模版&#xff0c;开箱即用&#xff0c;免费开源&#xff0c;一份代码多终端适配&#xff0c;支持H5、支付宝小程…