二叉排序树

1、定义

二叉排序树(BST)或者是空树,或者是满足以下性质的二叉树。
1)若它的左子树不空,则左子树上所有关键字的值均小于根关键字的值。
2)若它的右子树不空,则右子树上所有关键字的值均大于根关键字的值。
3)左右子树又格式一棵二叉排序树。

下图就是一棵二叉排序树


2、二叉排序树的查找算法

显然,要找的关键字要么在左子树上,要么在右子树上,要么在根结点上,由二叉排序树的定义可以知道,根结点中的关键字将所有关键字分成了两部分,即大于根节点中关键字的部分和小于根节点中关键字的部分,可以将待查关键字先和根节点中的关键字比较,如果相等则查找成功,如果小于则到左子树中进行查找,无需考虑右子树中的关键字,如果大于则到右子树中进行查找,无需考虑左子树中的关键字,如果来到当前树的子树根的时候,重复上述过程。如果来到了节点的空指针域,则说明查找失败。

比如我们要查找上图中的节点10,那么思路如下:

  1. 首先将10与根节点50进行比较大小,发现比根节点要小,所以继续与根节点的左子树30进行比较。
  2. 发现10比左子树30要小,所以继续与30的左子树10进行比较。
  3. 发现两值相等,即查找成功,返回10的位置。

3、二叉排序树的插入算法

二叉排序树是一个查找表,插入一个关键字首先要找到插入位置。对于一个不存在于二叉排序树中的关键字,其查找不成功的位置即为该关键字的插入位置。

比如我们要插入数字20到这棵二叉排序树中。那么步骤如下:

  1. 首先将20与根节点进行比较,发现比根节点小,所以继续与根节点的左子树30比较。
  2. 发现20比30也要小,所以继续与30的左子树10进行比较。
  3. 发现20比10要大,所以就将20插入到10的右子树中。

4、二叉排序树的构造算法

掌握了二叉排序树的插入操作以后,二叉排序树的构造就变得非常简单,只需要建立一棵空树,然后将关键字逐个插入到空树中即可构造一棵二叉排序树。

5、二叉排序树的删除操作

在二叉排序树中删除一个关键字时,不能把以该关键字所在的结点为根的子树都删除,而是只删除这一个结点,并保持二叉排序树的特性。

假设在二叉排序树上被删除的结点为p,f为其双亲结点,则删除结点p的过程可以分为以下3种情况。
1)p结点为叶子结点:直接删除即可
2)p结点只有右子树而无左子树,或者只有左子树而无右子树:此时只需要将p删掉,然后将p的子树直接连接在原来p与其双亲结点f相连的指针上即可。
3)p结点左右子树均有:此时可以将这种情况转化为1)或者2)。关键是找到中序遍历的前一个结点或者后一个结点来代替p结点。所以,可以先沿着p的左子树根结点的右指针一直往右走,直到来到其右子树的最右边一个结点r(即中序遍历中p的上一个结点),也可以沿着p的右子树根结点的左指针一直往左走,知道来到其左子树最左边的一个结点(即中序遍历中p的后一个结点),然后将p中的关键字用r中的关键字所替代。最后,如果r是叶子结点,则根据1)中的规则删除,如果r是非叶子结点,则根据2)的方法删除,此时r已经不可能有两个子树了。

  1. 删除的是叶节点(即没有孩子节点的)。比如20,删除它不会破坏原来树的结构,最简单。如图所示。
  1. 删除的是单孩子节点。比如90,删除它后需要将它的孩子节点与自己的父节点相连。情形比第一种复杂一些。

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

推荐阅读更多精彩内容