数据结构+各种树
Posted Data+Science+Insight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构+各种树相关的知识,希望对你有一定的参考价值。
数据结构+各种树
树,二叉树,满二叉树,完全二叉树,二叉查找树(二叉排序树)、平衡二叉树(AVL树)、红黑树、B-树、B+树、B*树,字典树(trie树)、后缀树、广义后缀树,
。。。。
树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
4、·父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
5、·孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
7、·节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
11、·子孙:以某节点为根的子树中任一节点都称为该节点的子孙;
12、·森林:由m(m>=0)棵互不相交的树的集合称为森林。
1、·无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树;
2、·有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
4、完全二叉树:对于一棵二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值(即子节点数目为2),且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树,其中满二叉树的定义是所有叶节点都在最底层的完全二叉树;
5、平衡二叉树(AVL树):当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
6、排序二叉树(二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树;
7、霍夫曼树(用于信息编码):带权路径最短的二叉树称为哈夫曼树或最优二叉树;
8、B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树。
线性表有两种存储方式:顺序存储和链式存储。二叉树的存储也是一个线性表结构,因此也具有顺序存储和链式存储两种方式。
顺序存储:顺序存储是一个让人又爱又恨的玩意儿。爱是因为它理解起来比较简单,查找起来也比较方便;恨是因为这玩意儿太傻瓜,它只一次性地向内存索取一段连续的空间,而且坚决不管在实际应用中够用不够用,而且这货在插入和删除元素时居然需要O(n**2)的时间复杂度,这个让人有点无语。将数据结构存储在固定的数组中,虽然在遍历速度上有一定的优势,但因所占空间比较大,是非主流二叉树,二叉树通常以链式存储。
目前看来,二叉树的顺序存储看起来还过得去,它在存储空间上的劣势并没有太大的体现,那么现在来演示一下万恶的退化二叉树的顺序存储,来看一下在这种情况下对于内存空间的浪费是多么的可怕!(纯属洗脑)
比如说,我有一棵一般二叉树,这棵二叉树只有三个结点(A/B/C),由于计划生育做的比较好,ABC节点都只有一个孩子,A拥有右子树B,B拥有左子树C。但是为了能够方便地从双亲找到孩子(或者从孩子找到双亲),就需要构建一些“虚结点”,从而使得一般二叉树“虚化”为完全二叉树,如图1所示,A的左子树这一脉就都是虚结点,然后按照完全二叉树的顺序存储方式进行存储,存储结果如图2所示,顺序存储的数组中虚节点均为空,虽然为空,但是还不得不给它留位置。可以看出,对于一般二叉树,如果虚结点过多的话,数组中会有很多的空值,贼浪费空间,这是非常让人无法忍受的!
图2
链式存储:链式存储的结构分为两种:二叉链表结构和三叉链表结构,我们着重介绍一下二叉链表
二叉链表结构:一个二叉链表结点由三部分组成:数据域,左孩子指针和右孩子指针,如下图所示。
其中,数据域data用来存放结点信息,左孩子指针lchild用来指向该结点的左子树,右孩子指针rchild用来指向该结点的右子树。图3(a)所示的完全二叉树的二叉链表结构如图3(b)所示。
(a)顺序存储分配的内存空间大小是固定的,不好根据二叉树结点数目的增多而动态扩展。如果内存空间分配过大,势必造成内存空间的浪费;如果分配过小,则会产生数组溢出的问题。另外,顺序存储在增加和删除结点时时间复杂度为O(n^2)。顺序存储的好处是方便查找结点。
(b)链式存储可以动态分配内存空间,比顺序存储更加灵活、方便,结点的最大数目仅与系统存储空间相关。另外,在插入/删除结点时的时间复杂度仅为O(n)。因此,在对二叉树操作时更多采用链式存储结构。
1、.xml,html等,那么编写这些东西的解析器的时候,不可避免用到树
3、.mysql数据库索引
5、.所以很多经典的AI算法其实都是树搜索,此外机器学习中的decision tree也是树结构
参考:数据结构---树的基本概念和性质
参考:当Kotlin遇见数据结构丨数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)
以上是关于数据结构+各种树的主要内容,如果未能解决你的问题,请参考以下文章