数据结构与算法分析3.树

点击进入我的博客

1 树与二叉树

1.1 树的概念

  1. 树是 n(n>=0) 个节点的有限集。
  2. n=0 时成为空树。
  3. 在任意一棵非空树中:
    3.1 有且只有一个特定的成为根节点;
    3.2 当n>1时,其余结点可分为m(m>0)个互不相交的有限集(T1、T2……Tm),其中每一个集合本身又是一棵树,并且称为根的子树;
    3.3 并且子树是不相交的。

1.2 基本概念

:节点拥有的子树的个数,度为0的节点为叶节点,度不为0的节点成为非终端节点或分支节点 。
树的度:是树内各节点度的最大值。
孩子:节点的子树的根称为该节点的孩子。
双亲:孩子结点的上层结点叫该结点的双亲。
兄弟:同一个双亲的孩子之间互称为兄弟。
祖先:节点的祖先是从根到该节点所经分支上的所有节点。
节点层次:从根结点算起,根为第一层,它的孩子为第二层…
深度:树中结点的最大层次数。
有序树(无序树):如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
森林:m(m>0)棵互不相交的树的集合

1.3 树的存储结构

双亲表示法

以一组连续空间存储数的节点,同时每个节点中,附设一个指示器指示其双亲节点在数组中的位置。找到双亲节点的时间复杂度:O(1);找到节点的孩子的时间复杂度:O(n)。

下标 data parent
0 F -1
1 C 0
2 E 0
3 A 1
4 D 1
5 H 2
6 G 2
7 B 4
8 M 6
增加长子域(该节点的最左边孩子的域)

在双亲表示法基础上增加该结点最左边孩子的指示器。

下标 data parent firstchild
0 F -1 1
1 C 0 3
2 E 0 5
3 A 1 -1
4 D 1 7
5 H 2 -1
6 G 2 8
7 B 4 -1
8 M 6 -1
增加右兄弟域

见名知意。

孩子表示法
  1. 第一种:根据树的度来确定每个节点指针域的个数,缺点是当树中各节点的度相差很大时,浪费空间,因为很多节点的指针域是空的。
  2. 第二种:每个节点指针域的个数等于该节点的度,专门取一个节点的位置来存储节点指针域的个数。如某个结点有两个孩子,则有两个孩子领域,一个数字域。缺点是克服了空间上的浪费,但由于每个节点的链表是不相同的结构,还要维护节点的度的数值,在时间会有损耗。
  3. 第三种:把每个节点的孩子结点排列起来,用单链表作为存储结构,n 个节点 n 个链表,如果为叶子节点,该单链表为空。再将 n 个头指针组成一个线性表,采用顺序存储结构,存放到一维数组中。
孩子双亲表示法
孩子双亲表示法
孩子兄弟表示法

任意一棵树,它的节点的第一个孩子如果存在就是唯一的,它的右兄弟也是唯一的。因此设置两个指针,分别指向该节点的第一个孩子和此节点的右兄弟。

2 二叉树

2.1 二叉树的基本概念

image.png
二叉树
  • 二叉树是每个结点最多有两个子树的树结构,且子树有左右之分,不能颠倒。
  • 二叉树的第i层最多有2^(i-1)个结点
  • 深度为k的二叉树至多有2^k-1个结点
满二叉树
  • 深度为k,并且含有2^k-1个结点的二叉树
  • 对于编号为 i 的结点,如果有双亲,双亲为 i/2 向下取整;如果有左孩子,左孩子编号为 2i,如果有右孩子,右孩子编号为 (2i + 1)
完全二叉树

对于深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

2.2 二叉树的遍历

先序遍历:根节点—— 左子树——右子树:FCADBEHGM
中序遍历:左子树——根结点——右子树:ACDBFHEGM
后序遍历:左子树——右子树——根结点:ABDCHGMEF

3 二叉查找树

又称为二叉排序树,其性质是:

  1. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值
  2. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值
  3. 左、右子树也分别为二叉排序树;
  4. 没有键值相等的节点。

4 AVL树

AVL(Adelson-Velsky-Landis)二叉树,是自平衡的二叉查找树。AVL树本质上还是一棵二叉搜索树,它的特点是:

  1. 本身首先是一棵二叉搜索树。
  2. 每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。

5 伸展树

伸展树(Splay Tree)也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。

6 2-3树

  1. 2-3树是这样的一棵多路查找树:其中的每一个结点都具有两个孩子(我们称它为2结点)或三个孩子(我们称它为3结点)。
  2. 一个2结点包含一个元素和两个孩子(或没有孩子),且与二叉排序树类似,左子树包含的元素小于该元素,右子树包含的元素大于该元素。不过,与二叉排序树不同的是,这个2结点要么没有孩子,要有就有两个,不能只有一个孩子。
  3. 一个3结点包含一小一大两个元素和三个孩子(或没有孩子),一个3结点要么没有孩子,要么具有3个孩子。如果某个3结点有孩子的话,左子树包含小于较小元素的元素,右子树包含大于较大元素的元素,中间子树包含介于两元素之间的元素。
  4. 并且2-3树中所有的叶子都在同一层次上。

7 B树

B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。B树为系统最优化大块数据的读和写操作。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文件系统。

结构
4阶B树

B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。

  1. 根节点至少有两个子节点
  2. 每个节点有M-1个key,并且以升序排列
  3. 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
  4. 其它节点至少有M/2个子节点

8 B+树

B+树

B+树是对B树的一种变形树,它与B树的差异在于:

  1. 有k个子结点的结点必然有k个关键码;
  2. 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中;
  3. 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录;
与B树的区别

B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

9 红黑树

红黑树是具有下列着色性质的二叉查找树:

  1. 每一个节点或者着成红色,或者着成黑色。
  2. 根是黑色的。
  3. 如果一个节点是红色的,那么它的子节点必须是黑色的。
  4. 从一个节点到一个null引用的每一条路径必须包含相同数目的黑色节点。

一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!
【内推码】:GTPUVBA
【内推链接】:https://job.toutiao.com/s/JRupWVj
【招生对象】:20年9月后~21年8月前 毕业的同学
【报名时间】:6.16-7.16(提前批简历投递只有一个月抓住机会哦!)
【画重点】:提前批和正式秋招不矛盾!面试成功,提前锁定Offer;若有失利,额外获得一次面试机会,正式秋招开启后还可再次投递。

你可能感兴趣的:(数据结构与算法分析3.树)