版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/KSMaster/article/details/79978018

1、树的定义
首先给出树的相关定义:树(tree)是包含n(n>0)个结点的有穷集,其中:
1)每个元素称为结点(node);
2)有一个特定的结点被称为根结点或树根(root);
3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树。
2、树的相关术语
节点的度:一个节点含有的子树的个数称为该节点的度;
叶节点或终端节点:度为0的节点称为叶节点;
非终端节点或分支节点:度不为0的节点;
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
兄弟节点:具有相同父节点的节点互称为兄弟节点;
树的度:一棵树中,最大的节点的度称为树的度;
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次;
堂兄弟节点:双亲在同一层的节点互为堂兄弟;
节点的祖先:从根到该节点所经分支上的所有节点;
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;
3:满二叉树
一颗深度为k且有2的k次幂个节点的二叉树。
4:完全二叉树
深度为k,有n个节点的二叉树,当且仅当其每个节点都与深度为k的二叉树中编号从1到n一一对应时,称之为完全二叉树。
5:二叉排序树
二叉查找树定义:又称为是二叉排序树(Binary Sort Tree)或二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
1) 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2) 若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
3) 它的左、右子树也分别为二叉排序树。
这里写图片描述
6:平衡二叉树
平衡二叉树应该是一颗二叉排序树,并且左子树和右子树的深度之差的绝对值不超过1。
7:B树
B树有称B-树,是一种平衡的多路查找树。B-树的阶是所有节点的孩子节点树的最大值。
一颗m阶B-树,或为空树,或为满足下列特性的m叉树。
1)树中每个节点至多有m棵子树;
2)若根节点不是叶子节点,则至少有两颗子树。
3)除根之外的所有非终端节点至少有m/2棵子树
4)所有的非终端节点包含下列信息数据:(n,A1,K1,A2,K2,……An,Kn),其中n为节点中的关键子树,A为指向子树的根节点的指针,K为关键字,且Ai-1所指子树中所有节点的关键字均小于Ki,An所指子树的关键字均大于Kn;
5)所有的叶子节点都出现在统一层次,并且不带信息;
这里写图片描述
8:B+树
B+树是应文件系统所需而出的一种B-的变形树,一颗m阶B-树和一颗m阶B+树的区别在于:
1)有n棵子树的节点含有n个关键字,每个关键字不保存数据,只用来索引,所有数据都抱存在叶子节点;
2)所有的叶子节点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接。
这里写图片描述

9:红黑树
一种二叉查找树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者Black。通过对任何一条从根到叶子节点的简单路径上各个节点的颜色进行约束,红黑树确保没有一条路经会比其他路径长出两倍,因而近似是平衡的。树中每个节点包含5个属性color,key,left,right,p,如果一个结点没有子节点或者父节点,则该节点响应的指针属性值为NIL,我们可以把这些NIL视为指向二叉搜索树的叶节点的指针,而把关键字的节点视为树的内部节点。
1)每个节点或是黑色的,或是红色的
2)根节点是黑色的
3)每个叶节点(即指树尾端NIL指针或NULL节点)是黑色的
4)如果一个节点是红色的,则他的两个子节点都是黑色
5)堆每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点
6)红黑树的查找,删除,插入最坏的时间复杂度为O(logN)
这里写图片描述
10:键树
如果一个关键字可以表示成字符的序号,即字符串,那么可以用键树,又称数字搜索树或字符树,来表示这样的字符串的集合,键树的结构受启发与一部大型字典的“书边标目”。字典中标出首字母是A,B,C,D…Z的单词的所在页,在对各部分标出第二字母是A,B,C,D…Z的单词所在页。
键树是一种特殊的查找树他是一颗长度大于等于2的树,树中的每个节点不是包含一个或几个关键字,而是只含有组成关键字的符号。
比如,如果关键字是数值,则节点中只包含一个数位,如果关键字是单词,则节点中只包含一个字母字符。根节点不代表任何字符,根以下第一层的节点代表字符串的第一个字符,第二层的节点代表字符串的第二个字符…..每个字符串可由一个特殊的符号如&作为字符串的结束符,用一个叶子节点来表示该特殊字符。把从根到叶子的路径上,所有节点(除根节点)对应的字符连接起来,就得到了一个字符串。因此每个叶子节点对应一个关键字,在叶子结点还可以包含一个指针,指向该关键字所对应的元素。整个字符串集合中的字符串的数目等于叶子结点的数目。如果一个集合中的关键字都具有这样的字符串特性,那么,该关键字集合就可采用这样一棵键树来表示。
键树的存储通常包含两种方式:
1)用树的孩子兄弟链来表示键树,称为双链树。每个Node有三个域,symbol域:存储关键字的字符,son域:存储指向第一颗子树的根的指针,brother域:存储指向右兄弟的指针。
2)用多重链表表示键树,称为Trie树或者字典树。
一颗键树
{HAD,HAS,HAVE,HERE,HIGH,HIS}

11:字典树
如果以树的多重链表来表示键树,则树的每个节点应包含d个指针域,此时的键树又称为字典树。
字典树的典型应用是用于统计,排序和保存大量字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。他的优点是:利用字符串的公共前缀来减少查询时间,最大限度的减少无谓字符串的比较,查询效率比哈希树高。
Trie树的三个基本性质:
1)根节点不包含字符,除根节点外每个节点只包含一个字符;
2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串
3)每个节点的所有子节点包含的字符都不相同
TIre树的应用:
1)串的快速检索
给出n个单词组成的熟词表,以及一片全用小写英文书写的文章,请你按最早出现的顺序,写出所有不在熟词表中的生词。在这道题中,我们可以用数组枚举,用哈希,字典树,将熟词建一颗树,然后读入文章进行比对,这种方法效率是比较高的。
2)串排序
给定N个互不相同的仅由一个单词构成的英文名,让你将他们按字典序从小到大输出,用字典树进行排序,采用数组的方式创建字典树,这棵树的每个节点的所有儿子很显然的按照其字母大小进行排序,对这棵树进行先序遍历即可
3)最长公共前缀
这里写图片描述

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页