数据结构与算法分析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;若有失利,额外获得一次面试机会,正式秋招开启后还可再次投递。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容