树、二叉树、完全二叉树、满二叉树的概念和性质

2023-10-27

目录

一、树的概念及其结构

 1、树的特点

2、树的相关概念:

3、树的表示

二、二叉树的概念及其结构

1、二叉树的概念 

2、二叉树的特点 

三、特殊的二叉树

1、满二叉树

2、完全二叉树

四、 二叉树的性质(很重要,常用)

 两道小例题

五、二叉树的存储结构


一、树的概念及其结构

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

 1、树的特点

①有一个特殊的结点,称为根结点,根节点没有前驱结点 。

②除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继

③因此,树是递归定义的。

注意:树形结构中,子树之间不能有交集,否则就不是树形结构

2、树的相关概念:

加红的概念用的较多!

节点的度一个节点含有的子树的个数称为该节点的度

叶节点或终端节点:度为0的节点称为叶节点

非终端节点或分支节点:度不为0的节点

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点

兄弟节点:具有相同父节点的节点互称为兄弟节点

树的度:一棵树中,最大的节点的度称为树的度

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

树的高度或深度:树中节点的最大层次

堂兄弟节点:双亲在同一层的节点互为堂兄弟

节点的祖先:从根到该节点所经分支上的所有节点

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

森林:由m(m>0)棵互不相交的树的集合称为森林

3、树的表示

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的左孩子右兄弟法表示。

typedef int DataType;//重新定义方便以后修改要存储的数据
struct Node
{
 struct Node* firstChild1; // 第一个孩子结点
 struct Node* pNextBrother; // 指向其下一个兄弟结点
 DataType data; // 结点中的数据域
};

树在我们实际生活中,可以类比电脑中的文件目录,一个文件夹中包含众多的文件夹,每个文件夹又包含许多文件

例如:

二、二叉树的概念及其结构

1、二叉树的概念 

一棵二叉树是结点的一个有限集合,该集合:

1. 或者为空

2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

2、二叉树的特点 

1. 二叉树不存在度大于2的结点

2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

 注意:对于任意二叉树都是由以下几种情况而复合成的:

三、特殊的二叉树

1、满二叉树

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是2^k-1,则它就是满二叉树。

2、完全二叉树

完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

说的简单点

满二叉树

①所有叶子节点都在最后一层

②所有分支节点都有两个孩子

完全二叉树

①前n-1层为满的

②最后一层不满,但最后一层从左往右是连续的 

 

四、 二叉树的性质(很重要,常用

①若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有2i-1个结点。
②若规定根结点的层数为1,则深度为h的二叉树的最大结点数为2h-1个。
③对任何一棵二叉树,如果度为0的叶结点个数为n0,度为2的分支结点个数为n2,则有n0 = n2+1。(常用这个性质解选择题)
④若规定根结点的层数为1,则具有N个结点的满二叉树的深度h = log2(N+1)。
⑤对于具有N个结点的完全二叉树,如果按照从上至下、从左至右的数组顺序对所有结点从0开始编号,则对于序号为i的结点:
1、若 i > 0,则该结点的父结点序号为:( i - 1) / 2;若 i = 0,则无父结点。
2、若2i + 1 < N,则该结点的左孩子序号为:2i + 1;若2i + 1 >= N,则无左孩子。
3、若2i + 2 < N,则该结点的右孩子序号为:2i + 2;若2i + 2 >= N,则无右孩子。

 两道小例题

1.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n

B n+1

C n-1

D n/2

2.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )

A 11

B 10

C 8

D 12

 解析:

 

五、二叉树的存储结构

二叉树一般有两种结构存储,一种顺序结构,一种链式结构

1. 顺序存储(数组)

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的会专门讲解。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

2. 链式存储(链表)

二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树、二叉树、完全二叉树、满二叉树的概念和性质 的相关文章

  • 例题:加权合并与路径压缩

    题目 使用加权合并规则与路径压缩 对下列从0到15之间的数的等价对进行归并 并给出所得到的树的父指针表示法的数组表示 在初始情况下 集合中的每个元素分别在独立的等价类中 当两棵待归并的树的规模同样大时 使结点值较大的根结点作为值较小的根结点
  • 从redis为什么单线程还那么快到epoll的设计原理

    文章目录 redis为什么快 上下文切换 为什么采用单线程 redis的I O多路复用 epoll与select poll区别 select poll的几大缺点 用户态拷贝到内核态 epoll IO多路复用模型实现机制 epoll 优势详解
  • Redis-密钥登录ssh,免密码

    1 在kali上生成密钥 命令 ssh keygen t rsa 因为我这里有了 所以y选择了覆盖 如果是想无密码登录的话 则直接enter跳过 2 因为我这里config set dir root ssh dir有问题 所以我直接就把生成
  • 结构化开发方法--系统分析及设计概述

    说在前面 本系列文章专注于软考备考复习内容梳理 文章内容是对教材中知识点和考点的提炼 备考过程中可以有针对的进行复习 减少阅读量 有的放矢 导航目录 一 系统分析概述 二 系统设计的基本原理 三 系统总体结构设计 四 系统文档信息 一 系统

随机推荐

  • 【避坑指“难”】自定义AntV G2 Chart柱状图悬浮框信息

    实现效果如下 官方配置如下 import Chart from antv g2 const data time 16 Q1 type 移动游戏 value 0 time 16 Q1 type 移动购物 value 17 8 time 16
  • 不同编程语言语言的适用场景

    1 如何通俗地解释 C C C Java JavaScript HTML Python的用处 2 二十五岁零基础转行做软件测试怎么样 3 软件测试中的自动化测试一般要会什么编程语言 4 Which Programming Language
  • Linux 定时器设置

    crontab l 查看定时器任务 crontab e 编辑 定时器任务 sbin service crond start 启动服务 sbin service crond stop 关闭服务 sbin service crond resta
  • 【CUDA】第一个CUDA程序-addVector

    本文主要通过对两个浮点数组中的数据进行相加 并将其结果放入第三个数组中 其算法分别在CPU GPU上分别执行 并比较了所需时间 强烈感受到GPU的并行计算能力 这里 每个数组的元素大小为30000000个 一 实现代码 include
  • 模拟信号_模拟信号与模拟电路

    信号 用来携带信息的物理量 电信号 随着时间变化的电压或电流 在数学上 我们可以通过函数来表达这种变化情况 因此我们可以画出波形 电子电路中的信号分类 数字信号和模拟信号 模拟信号的特点 连续性 无论是在时间上还是在数值上 大多数的物理量均
  • Java中常见的异常类型是哪两种?他们有什么区别?

    Java中有两种异常 受检查的异常 checked 和不受检查的异常 unchecked 不受检查的异常不需要在方法或者是构造函数上声明 就算是方法或者是构造函数可能会抛出这样的异常 并且不受检查的异常可以传播到方法或者构造函数的外面 相反
  • 头条面经

    先来波面经 等这段时间秋招有空闲了再来好好总结 首先第一个 手写堆排快排 问题是求前k个大的数 或者第k大的数 第二个 intent的作用 为什么采用intent去连接四大组件 因为在各大组件将要回收的时候 可以将其保留 可以参考hongy
  • vue el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

    项目场景
  • 24 KVM管理虚拟机-配置VNC-TLS登录

    文章目录 24 KVM管理虚拟机 配置VNC TLS登录 24 1 概述 24 2 操作步骤 24 KVM管理虚拟机 配置VNC TLS登录 24 1 概述 VNC服务端和客户端默认采用明文方式进行数据传输 因此通信内容可能被第三方截获 为
  • 刷脸支付既方便快捷又新颖酷炫

    刷脸支付正是因为市场火热 支付行业的宏观监管日趋严格 新兴的人工智能技术不断被应用到支付场景中 指纹支付 声纹支付到刷脸支付 新技术的蔓延总是能出乎我们的意料 迅速地渗透进生活的方方面面 移动支付未来路在何方 支付行业一直是红海市场 而随着
  • ant design proV1.0的采坑之旅 (动态创建菜单、访问mock数据、富文本编辑器)

    最近公司做一个后台管理系统 犹豫半天还是想用ant design 后来发现他们有现成的脚手架 ant design pro github地址 果断拉代码下来运行起来 一 ant design pro 项目目录结构和流程 整体目录大概长这个样
  • Tensorflow中的图操作和图变量

    一 可能引起的问题 1 图操作重复载入会导致模型变量越来越大 调用saver保存时可能报错 错误信息 Cannot serialize protocol buffer of type tensorflow GraphDef as the s
  • sort按vector元素排序

    include
  • Xshell在使用msh的时候无响应

    在使用Xshell开发正点原子的战舰V3的时候 下载程序或者复位单片机后无响应 在RTT官方文档看到有如下说明 注 正点原子一键下载电路和终端工具冲突 在使用终端工具如 PuTTy XShell 时 会出现系统不能启动的问题 推荐使用串口调
  • 微信微店怎么开店铺步骤【微信开店】

    商家在微信平台主要是通过什么方式进行卖货呢 大家的答案都会是微信小店 小程序微店铺之类的 的确微信店铺是商家在微信平台上重要的卖货渠道 那么微信微店怎么开店铺 下面就给大家分享微信微店怎么开店铺步骤 一 准备好资料 由于微信上通过小程序销售
  • wireshark抓组播数据_wireshark怎么抓包 wireshark抓包详细图文教程

    开始界面 wireshark是捕获机器上的某一块网卡的网络包 当你的机器上有多块网卡的时候 你需要选择一个网卡 点击Caputre gt Interfaces 出现下面对话框 选择正确的网卡 然后点击 Start 按钮 开始抓包 Wires
  • netfilter 理解

    Netfilter概述 Netfilter IPTables是Linux2 4 x之后新一代的Linux防火墙机制 是linux内核的一个子系统 Netfilter采用模块化设计 具有良好的可扩充性 其重要工具模块IPTables从用户态的
  • 线程间同步与互斥:生产者消费者问题

    总结一下线程间同步与互斥生 产者消费者问题 一 互斥锁 mutex 对于多线程的程序 访问冲突的问题是很普遍的 解决的办法是引 入互斥锁 Mutex MutualExclusive Lock 获得锁的线程可以完成 读 修改 写 的操作 然后
  • DataGridView使用bindingNavigator实现分页功能(应用存储过程)

    想法是这样的 使用bindingNavigator 存储过程实现DataGridView的分页功能 其中包含简单的查询 存储过程如下 创建分页查询存储过程 含输出参数 输入参数 含搜索功能 use HotelDB if exists sel
  • 树、二叉树、完全二叉树、满二叉树的概念和性质

    目录 一 树的概念及其结构 1 树的特点 2 树的相关概念 3 树的表示 二 二叉树的概念及其结构 1 二叉树的概念 2 二叉树的特点 三 特殊的二叉树 1 满二叉树 2 完全二叉树 四 二叉树的性质 很重要 常用 两道小例题 五 二叉树的