当前位置: 首页 > news >正文

二叉树(1)

1 树概念及结构

1.1树的概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。

把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,叶朝下的。

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

 

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

以上几种非树,都被称作。这个我们后面会讲述。 

 1.2 树的相关概念

  • 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6
  • 叶节点或终端节点度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点
  • 非终端节点或分支节点度不为0的节点; 如上图:D、E、F、G...等节点为分支节点
  • 双亲节点或父节点若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点
  • 孩子节点或子节点一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点
  • 树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点
  • 节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙
  • 森林:由m(m>0)棵互不相交的树的集合称为森林;(并查集就是森林)

 一个树只能分为:一个根+N个子树。

1.3 树的表示

这里使用 “左孩子右兄弟” 表示法。

1.4 树在实际中的运用(表示文件系统的目录树结构)

二叉树概念及结构 

2.1 概念

一棵二叉树是结点的一个有限集合,该集合:
  1. 或者为空
  2. 一个根节点加上两棵别称为左子树和右子树的二叉树组成

从上图可以看出:
1. 二叉树不存在度大于2的结点
2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

不能说二叉树一定度为2,例子如下。但是度为2的树就是二叉树。 

二叉树是一个特殊的树。 

2.2 特殊的二叉树

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

2. 完全二叉树 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为 K 的,有n 个结点的二叉树,当且仅当其每一个结点都与深度为 K 的满二叉树中编号从 1 n 的结点一一对 应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。 【前n-1层是满的,最后一层不一定满(因为满二叉树也是一个特殊的二叉树),但是从左到右都是连续的】

完全二叉树高度为h,节点数量为:[2^(h-1),2^h-1]

2.3 二叉树的存储结构  

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构

1. 顺序存储
顺序结构存储就是使用 数组来存储 ,一般使用数组 只适合表示完全二叉树 ,因为不是完全二叉树有空间的浪费。而现实中使用中只有堆才会使用数组来存储,关于堆我们后面的章节会专门讲解。二叉树顺 序存储在物理上是一个数组,在逻辑上是一颗二叉树。
2. 链式存储
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链,后面课程学到高阶数据结构如红黑树等会用到三叉链。

 

二叉链表一般用于:搜索二叉树 =》 AVL树 和 红黑树。

 最多查找高度次

3 堆的概念

3.1 堆的概念

  • 堆总是一棵完全二叉树。  

 堆一般是把数组数据看作一个完全二叉树。

小堆要求:任意一个父亲<=孩子。

大堆要求:任意一个父亲>=孩子。

  • 有序数组一定是堆,但是堆不一定有序。

3.2 堆的意义

1、堆排序。O(N*logN)

2、top k问题 

 3.3 选择题

1.下列关键字序列为堆的是:(A
A 100,60,70,50,32,65
B 60,70,65,50,32,100
C 65,100,70,32,50,60
D 70,65,100,32,50,60
E 32,50,100,70,65,60
F 50,100,70,65,60,32

2.已知小根堆为8,15,10,21,34,16,12,删除关键字 8 之后需重建堆,在此过程中,关键字之间的比较次数是(C)。
A 1
B 2
C 3
D 4

3.一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为(C
A(11 5 7 2 3 17)
B(11 5 7 2 17 3)
C(17 11 7 2 3 5)
D(17 11 7 5 3 2)
E(17 7 11 3 5 2)
F(17 7 11 3 2 5)

4.最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是(C
A[3,2,5,7,4,6,8]
B[2,3,5,7,4,6,8]
C[2,3,4,5,7,8,6]
D[2,3,4,5,6,7,8] 

http://www.lryc.cn/news/293182.html

相关文章:

  • ArcGIS Pro字段编号相关代码
  • AJAX-URL查询参数
  • DBeaver连接ClickHouse,时间少了8小时
  • week03day03(文件操作、正则表达式1)
  • 【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)
  • 数据结构—基础知识:哈夫曼树
  • 计算机网络(第六版)复习提纲24
  • [机器学习]TF-IDF算法
  • Loadbalancer如何优雅分担服务负荷
  • 计算机网络——链路层(1)
  • OpenCV 0 - VS2019配置OpenCV
  • eCos flash模拟EEPROM实现NV系统
  • 【MongoDB】跨库跨表查询(python版)
  • Ruoyi-Cloud-Plus_Nacos配置服务漏洞CVE-2021-29441_官方解决方法以及_修改源码解决---SpringCloud工作笔记199
  • 和鲸科技与智谱AI达成合作,共建大模型生态基座
  • 计算机网络实验五
  • 通过 React 来构建界面
  • 真机调试,微信小程序,uniapp项目在微信开发者工具中真机调试,手机和电脑要连同一个wifi,先清空缓存,页面从登录页进入,再点真机调试,这样就不会报错了
  • vue3快速入门
  • go 问题记录(日志丢失)
  • 彻底解决 MAC Android Studio gradle async 时出现 “connect timed out“ 问题
  • 计算机网络第4章(网络层)
  • SpringbootWeb案例
  • 【初中生讲机器学习】4. 支持向量机算法怎么用?一个实例带你看懂!
  • CentOS下安装vlc
  • 概率论中的全概率公式、贝叶斯公式解析
  • 亿赛通-数据泄露防护(DLP)UploadFileList;login接口存在任意文件读取漏洞 附POC软件
  • 如何使用 Google 搜索引擎保姆级教程(附链接)
  • SpringBoot实现轻量级接口反向代理、转发
  • 算法训练营day21,回溯1