数据结构学习——树的基本分类

自学数据结构已经很久了,使用的教材是《数据结构与算法分析——C语言描述》。现在回过头来再看一遍此书,重新梳理一下数据结构的相关知识。

以下是摘自维基百科的一些树的基本分类:

    • 无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树
    • 有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树;
      • 二叉树:每个节点最多含有两个子树的树称为二叉树;

        • 完全二叉树:对于一颗二叉树,假设其深度为d(d>1)。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列,这样的二叉树被称为完全二叉树;
        • 满二叉树:对于上述的完全二叉树,如果去掉其第d层的所有节点,那么剩下的部分就构成一个满二叉树(此时该满二叉树的深度为d-1);
      • 霍夫曼树带权路径最短的二叉树称为哈夫曼树或最优二叉树;
      • B树

以下是该书中还涉及到的一些树的基本概念:

表达式树:树叶是操作数,如常量或变量。其他的节点是操作符。

二叉查找树:对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,它的右子树中所有关键字值大于X的关键字值。

AVL树:每个节点的左子树和右子树的高度最多差1的二叉查找树。

伸展树:它保证从空树开始任意连续M次对树的操作最多花费O(M*logN)时间。

B-树(引自百度百科):一棵m阶B树(balanced tree of order m)是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:

1、根结点至少有两个子女;

2、每个非根节点所包含的关键字个数 j 满足:┌m/2┐ - 1 <= j <= m - 1;

3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:┌m/2┐ <= k <= m ;

4、所有的叶子结点都位于同一层。

(知识点:三种树的遍历方式——先序遍历,中序遍历,后序遍历)

备注:┌M/2┐是向上取整,即取与结果最接近的比结果大的整数,┌3/2┐=2;

└M/2┘是向下取整,即取与结果最接近的比结果小的整数,└3/2┘=1.

Trie树:又称单词查找树,字典树。根节点不包含字符,除根节点外每一个节点都只包含一个字符;
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。(在刷ACM题学习到的)

关于三种遍历树的方法做一个简单的总结:

先序遍历(前缀表达式):打印顺序:节点、左子树、右子树。

中序遍历(中缀表达式):打印顺序:左子树、节点、右子树。

后序遍历(后缀表达式):打印顺序:左子树、右子树、节点。

时间: 2024-10-15 12:36:11

数据结构学习——树的基本分类的相关文章

数据结构学习——树的基本概念

参考书籍<数据结构与算法分析--C语言描述> 连接俩个节点的称为边 一棵树是N个节点和N-1条边的集合 没有儿子的节点称为树叶(叶). 具有相同父亲的称为兄弟. 对任意节点ni,ni的深度为从根到ni的唯一路经长,其中根的深度为0.一棵树叶的深度等于它最深的树叶深度. ni的高是从ni到一片树叶的最长路径的长,一棵树的高等于它根的高,所有树叶的高都是0. 某路径的长为该路径上边的条数. 一棵树的所有节点的深度的和称为内部路径长. 下图所示的树中: 树的根节点为20,有7个节点,3个叶节点. 节

数据结构学习笔记(树、二叉树)

树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1.T2........Tn,其中每一个集合本身又是一棵树,并且称为根的子树. 对于树的定义还需要强调两点:1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点.2.m>0时,子树的个数没有限制,但它们一定是互不相交的. 结点

数据结构学习之第7章 树和二叉树

数据结构学习之第7章 树和二叉树 0x7.1.1 树的基本概念 ?1.树的定义 ? 树是由n(n>=0)个结点(或元素)组成的有限集合(记为T) ? 如果n>0,这n个结点中有且仅有一个结点作为树的根结点,简称为根,其余结点可分为m(m>=0)个互不相交的有限集\[T_{1}T_{2}\cdots T_{m}\],其中每个子集又是一棵符合定义的子树,称为根结点的子树. 知识点:由树的定义我们可以看出来树的结构是递归的 ?2.树的逻辑表示法 ? 1.树形表示法 ? 2.文氏图表示法 ? 3

算法学习 - 树的一些解释

树的解释 树是ADT里面很经典的数据结构了,应用太多了,相对于链表的线性访问时间,O(n).树的大部分操作的平均运行时间都是为O(logN). - 树的概念 树有几种方式定义,一种是递归,若树不为空,则一棵树是由根(root)的节点r和0个或者多个非空树组成.N个节点的树,有N-1个边.没有儿子的节点称为叶子(leaf). 对于任意节点N(i),它的深度为从根节点到N(i)的唯一路径长度.如果存在N(1)到N(2)的路径,那么N(1)是N(2)的祖先.如果N(1)不等于N(2),那么就称为真祖先

数据结构-伸展树

声明:本文是对某高中生的竞赛论文学习的文章 介绍: 二叉查找树能够支持多种动态集合操作.对于一个含有n个结点的完全二叉树,这些操作的最还情况运行时间是O(lgn),但如果树是含有n个结点的线性链,则这些操作的最坏情况运行时间为O(n).而像红黑树.AVL树这种二叉查找树的变形在最坏情况下,仍能保持较好性能. 本文将要介绍的伸展树也是二叉查找树的变形,它对空间要求及编程难度的要求相对不高. 伸展树: 伸展树与二叉查找树一样,具有有序性.即伸展树的每一个结点x满足:该结点的左子树中的每个元素都小于x

数据结构学习之二叉排序树

介绍:二叉排序树是以一定的规则排列树中元素,因而可以进行快速的排序和查询的树状数据结构,一般规则是:对于树中任意一个节点,左孩子严格小于根,根严格小于右孩子,有点像大根堆.(只是大根堆中左右孩子关系并不确定,且和根的关系是统一的,而且有上浮和下沉操作使得大根堆总是一棵完全二叉树,其不断弹出堆顶形成有序列的过程叫做堆排序.虽然二叉排序树中也有旋转操作使得树尽量平衡,但是由于数值大小分明的左右孩子,在进行平衡操作时远不如大根堆方便快捷.)对于一棵已经构造完成的排序二叉树,它的中序遍历序列即为升序排列

数据结构学习——堆

1 基本介绍 堆数据结构是一种数组对象,它可以被视为一颗完全二叉树.堆的访问可以通过三个函数来进行即, parent(i) return floor(i/2); left(i) return 2i; right(i) return 2i + 1; left操作可以通过一步左移操作完成,right操作可以通过左移并在地位+1实现,parent操作则可以通过把i右移一位得到.在实现中通常会使用宏或者内联函数来实现这三个操作. 二叉堆有两种,最大堆和最小堆.对于最大堆有 A[i] >= A[left(

数据结构之——树与二叉树

树的基本概念: 树的概念是学习树的关键所在,掌握了树的基本概念,学会树与二叉树,so easy.我通过一棵树来了解树的基本概念,如下图 1.结点的度 结点的度是子结点的个数.例如:结点1有三个字结点2,3,4,所以结点1的度为3. 2.树的度 树的度等于所有结点度中度最高的值.例如:上图中结点度最高为3,所以树的度为3. 3.叶子结点 叶子结点是度为0的结点即没有子结点的结点.例如:上图中3,5,6,7,9,10. 4.分支结点 分支结点是除了叶子结点,树中的其他所有结点.例如:上面树的分支结点

小猪的数据结构学习笔记(四)

小猪的数据结构学习笔记(四) 线性表之静态链表 --转载请注明出处:coder-pig 本章引言: 在二,三中中我们分别学习了顺序表中的线性表与单链表,线性表有点类似于 我们前面所学的数组,而单链表使用的最多的是指针,这里问个简单的问题, 如果是在以前没有指针的话,前辈先人们怎么实现单链表呢?大家思考下! 没有指针,那么用什么来代替呢?前辈先人们非常机智,想出了使用下标+游标的方式 来实现单链表的效果!也就是今天要讲的--静态链表! 当然你也可以直接跳过本章,因为有了单链表就没有必要用静态链表了