二叉树解决了什么问题?
一、二叉树解决了什么问题
1、元素搜索
二叉树的快速查找性质使其非常适合于元素搜索。通过二叉树的查找操作,可以高效地搜索指定元素是否存在于树中。
2、数据排序
二叉搜索树还可以用于数据排序。具体地说,将数据插入到二叉搜索树中,并按照一定规则遍历树,就可以得到有序的数据。
3、反向顺序遍历
通过对二叉树的左右子树遍历顺序进行逆序遍历,可以实现反向顺序遍历。这在某些场景下非常有用,例如一个日志文件,需要按时间逆序输出。
4、构建有效的数据结构
二叉树可以应用到各种算法和系统中,提供高效的数据存储和查找,非常适用于构建各种有效的数据结构,例如哈希表、堆等,这些数据结构在计算机科学中被广泛使用。
二、二叉树性质
1、一般二叉树性质
在非空二叉树的i层上,至多有2i-1个节点(i>=1)。通过归纳法论证。在深度为K的二叉树上非常多有2k-1个结点(k>=1)。通过归纳法论证。对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1。在一棵二叉树中,除了叶子结点(度为0)之外,就剩下度为2(n2)和1(n1)的结点了。则树的结点总数为T = n0+n1+n2;在二叉树中结点总数为T,而连线数为T-1。所以有:n0+n1+n2-1 = 2*n2 +n1;最后得到n0 = n2+1。
2、完全二叉树性质
具有n的结点的完全二叉树的深度为log2n+1:
满二叉树是完全二叉树,对于深度为k的满二叉树中结点数量是2k-1 = n,完全二叉树结点数量肯定非常多2k-1,同时完全二叉树倒数第二层肯定是满的(倒数名列前茅层有结点,那么倒是第二层序号和满二叉树相同),所以完全二叉树的结点数最少大于少一层的满二叉树,为2k-1-1。
根据上面推断得出:2k-1-1< n=<2k-1,因为结点数Nn为整数那么n<=2k-1可以推出n<=2k ,n>2k-1-1可以推出 n>=2k-1,所以2k-1
如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1<=i<=n)有:
如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整如果2i>n那么节点i没有左孩子,否则其左孩子为2i如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1三、特殊的二叉树及其特点
1、斜树
所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。这就是斜树,应用较少。
2、满二叉树
所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树。就是完美圆满的意思,关键在于树的平衡。
根据满二叉树的定义,得到其特点为:
叶子只能出现在最下一层。非叶子结点度一定是2。在同样深度的二叉树中,满二叉树的结点个数非常多,叶子树非常多。3、完全二叉树
对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。满二叉树必须是完全二叉树,反过来不一定成立。
其中关键点是按层序编号,然后对应查找。
结合完全二叉树定义得到其特点:
叶子结点只能出现在最下一层(满二叉树继承而来)。最下层叶子结点一定集中在左 部连续位置。倒数第二层,如有叶子节点,一定出现在右部连续位置。同样结点树的二叉树,完全二叉树的深度最小(满二叉树也是对的)。延伸阅读1:平衡二叉树
平衡二叉树或者是一颗空树,或者是具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。平衡因子(bf):结点的左子树的深度减去右子树的深度,那么显然-1<=bf<=1。很显然,平衡二叉树是在二叉排序树(BST)上引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降。
猜你喜欢LIKE
相关推荐HOT
更多>>分析型数据库是什么,和关系型数据库有什么区别?
一、分析型数据库分析型是从数据库的作用来划分的,其重点用来做数据分析(OLAP),大量都是select语句。还有一种是专门用来做事务处理的,一般...详情>>
2023-10-17 23:26:16python self是什么意思,怎么使用?
一、python self介绍首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调...详情>>
2023-10-17 21:24:11创建Project提交到Github需要做什么?
一、创建Project提交到Github需要做什么1、在Github新建一个repository。2、打开编译器,编辑最外面的.gitignore,如果没有就新建一个这样的文件...详情>>
2023-10-17 20:23:50C/S和B/S架构的工作原理及优缺点?
一、C/S架构的工作原理C/S 架构中客户端和服务器之间通过网络连接进行通信,客户端发送请求后会等待服务器返回响应,直到收到响应后才能显示给...详情>>
2023-10-17 19:43:01热门推荐
Web前端开发是什么技术?
沸分析型数据库是什么,和关系型数据库有什么区别?
热对数量庞大的照片进行分类管理,较好的方便检索的方法是什么?
热web前端会用到哪些软件工具?
新Flash动画制作的原理是什么?
java/Python这么火,c++这么难,为什么我们还要选择用C++?
app开发的制作为什么报价和开发周期都不一样?
python self是什么意思,怎么使用?
什么是SEO?
PHP中的interface有什么用处?
创建Project提交到Github需要做什么?
为什么SwiftUI用struct来表示view?
C/S和B/S架构的工作原理及优缺点?
Flash为什么被淘汰了?