Day3--搜索树

在二叉判定树以及二分搜索的基础上,基于二叉树的搜索树产生,该数据结构可以随时进行调整,可以保证高效的搜索效率。

内容:

1.二叉搜索树

2.二叉平衡树

3.B-树

一、二叉搜索树

1、定义:(1)所有节点的值都不一样;(2)根节点的值大于左子树所有节点的值;(3)根节点的值小与右子树所有节点的值;(4)左右子树也都是二叉搜索树。

2、基本算法查找、插入和删除

    查找:类似于二分查找,将带查找的值与根节点的值比较,若小于根节点的值,则递归搜索根节点的左子树;否则递归搜索根节点的右子树;若等于根节点的值,则返回成功。

    插入:若根节点的为空,则将待插入的值作为根节点;若待插入值小于根节点,则递归搜索根节点的左子树至搜索失败,新建节点并令新节点的值等于待插入的值;若待插入的值大于根节点的值,按类似的方法搜索右子树。当待插入的值等于树中某一节点值时,返回。

    删除:当进行删除操作时,如果被删除的节点为叶子节点,则直接将叶子节点删除掉;如果被删除节点只有一个孩子,则将它的孩子代替被删除节点的位置;如果被删除的节点有两个孩子,则令其左子树中最大的元素代替被删除节点的位置,或者令被删除节点右子树中最小的节点代替被删除节点。

二、二叉平衡树

虽然二叉搜索树具有很强的搜索效率,但是假如插入的数据为一有序序列时,二叉树就变为了一个有序链表,搜索效率变低。为了解决这个问题,二叉平衡树出现了。

1、定义:二叉平衡树是一颗二叉搜索树,但是其每个节点左右子树的高度差小于1。

2、基本算法插入、删除

    插入:平衡树的插入与搜索树的插入相同,但是要保证其平衡性。当出现了不平衡现象时,要进行调整:

    (1)假设p指向AVL树的树根,若p==NULL,则插入元素的值为即为跟节点的值,树的高度+1。

    (2)若根节点不为空,调用Search(p,key)判断待插入元素在树内是否存在。若存在,则返回;若不存在,记录待插入位置A,并转入步骤(3)。

    (3)考虑离A最近的节点,若执行插入运算后改节点的平衡因子的绝对值大于一,则把该祖先节点的位置标记为B,左孩子为Bl,右孩子为Br。转入步骤(6)。

    (4)若从根节点到A位置的平衡因子都为0,则修改其平衡因子。当插入位置在某个节点的左子树上,改节点的平衡因子+1,插入位置若在某右节点的子树上时,改节点的平衡因子-1。树的高度+1。

    (5)若B的平衡因子为1,且新节点插入到B的右子树上时,则B的平衡因子该为0,树的高度不变。

    (6)此时B的平衡因子为2,下面细分LL型和LR型:

LL:如果Bl的平衡因子为1,新插入的节点插在Bl的左子树上,则向右旋转调节B为根的子树,树的高度不变;

LR型: 若Bl的平衡因子为-1,且新插入的节点在Bl的右子树上,则参考三原则,最以B为根的节点进行调整。树的高度不变。(一般是先左旋转后右旋转)

    (7)当B的平衡因子为-2时,对应的情况时RR和RL,与(6)类似。

三、B-树

在学习B树之前,我们应该先知道什么是m叉搜索树。

(一)、m叉搜索树

如图为m叉搜索树的递归定义

可以看出:一个节点中最多存放m-1个元素和m个指向子树的指针;每个节点中包含的元素树比指针树少1。

性质:高度为h的m叉搜索树中最多有m^h-1个元素;

           含有N个元素的m叉搜索树的高度在log[m](N+1)到N之间。

(二)、B-树

1、定义

可以看出:

A.一个节点最多有m个孩子,m-1个关键字;

B.除根结点和失败节点外每个节点最少有[m/2]个孩子,[m/2]-1个关键字;

C.根节点最少有两个孩子;

D.所有的失败节点均在同一层上,即失败节点为双亲的叶子节点。

那我们怎末判断一颗树是不是B树呢?

1、首先看失败节点是否在同一层上;

2、查看根节点是否最少有两个孩子;

3、确定m的值,并计算m/2的值;

4、查看每个节点(除根节点和失败节点)的孩子数量有没有少于[m/2]个。

(二)、B-树的性质

1、设失败节点的数目为s,那么一个B树包含的元素总数N是失败节点的个数减一,即N=s-1;

2、含有N个元素的m阶B树的高度h有:h<=1+log[m/2](N+1)/2;

(三)B树的操作

1、查找操作

与搜索树的查找类似。

B树主要做文件的索引

在B树寻找节点,需执行的磁盘访问次数最多的是1+log[m/2]((N+1)/2);

在节点中找关键字可以采用顺序搜索或者二分搜索。

2、插入

步骤为:

(1)、搜索   (2)、插入    (3)、调整(分裂)

3、删除

步骤为:

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

推荐阅读更多精彩内容