树与二叉树的应用 ----- 二叉排序树

1、二叉排序树的定义

      》》 二叉排序树(简称 BST),也称为“ 二叉查找树 ”。二叉查找树或者是一棵空树,或者是一棵具有下列

           特性的非空二叉树:

               a.  若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值

               b.  若右子树非空,则右子树上所有结点关键子值均大于根结点的关键字值

               c.  左、右子树本身也分别是一棵二叉排序树

      》》 根据二叉排序树的定义,有 “  左子树结点值 <  根结点值  <  右子树结点值 ” ,所以,对二叉排序树

            进行中序遍历,可以得到一个递增的有序序列。

2、二叉排序树的查找

      》》二叉排序树的查找:从根结点开始,沿某一个分支逐层向下进行比较的过程。若二叉排序树非空,将给定

            值与根结点的关键字比较,若相等,则查找成功;若不等,则当根结点的关键字大于给定关键字值时,在

              根结点的左子树中查找,否则在根结点的右子树中查找。

3、二叉排序树的插入

       》》 二叉排序树作为一种动态集合,其特点是树的结构通常不是一次生成的,而是在查找过程中,当树中

            不存在关键字等于给定值的结点时再进行插入。

       》》  由于二叉排序树是递归定义的,插入结点的过程是:若原二叉排序树为空,则直接插入结点;否则,

              若关键字 k 小于根结点关键字,则插入到左子树中,若关键字 k 大于根结点关键字,则插入到右子树中。

        》》 插入的新结点一定是某个叶子结点

4、二叉排序树的构造

         》》 构造一棵二叉排序树就是依次输入数据元素,并将它们插入到二叉排序树中的适当位置上的过程。

                具体的过程是,每读入一个元素,就建立一个新结点,若二叉树排序树非空,则将新结点的值与根

                 结点的值比较,如果小于根结点的值,则插入到左子树中,否则插入到右子树中;若二叉排序树为

                 空,则新结点作为二叉排序树的根结点。

5、二叉排序树的删除

         》》 在二叉排序树中删除一个结点时,不能把以该结点为根的子树上的结点都删除,必须先把被删除结点

                从存储二叉排序树的链表上摘下,将因删除结点而断开的二叉链表重新链接起来,同时确保二叉排序

                树的性质不会丢失。

         》》 删除操作的实现过程按 3 种情况来处理:

                  ##  如果被删除结点  z 是叶结点,则直接删除,不会破坏二叉排序树的性质。

                  ##   若结点 z 只有一棵左子树或者右子树,则让 z 的子树成为 z 父结点的子树,替代 z 的位置。

                  ##   若结点 z  有左、右两棵子树,则令 z 的直接后继(或者直接前驱)替代 z  ,然后从二叉排序

                        树中删去这个直接后继(或者直接前驱),这样就转换成了第一或者第二种情况。

6、二叉排序树的查找效率分析

          》》 对于高度为  H 的二叉排序树,其插入和删除操作的运行时间都是 O( H ) 。但是在最坏情况下,

                   即构造二叉排序树的输入序列是有序的,则会形成一个倾斜的单支树,此时二叉排序树的性能显著

                  变坏,树的高度也增加为元素个数 N 。

           》》二叉排序树查找算法的平均查找长度,主要取决于树的高度,即与二叉树的形态有关。

                 如果二叉排序树是一个只有右(左)孩子的单支树(类似于有序的单链表),其平均查找长度和

                  单链表相同,为 O( n ) 。如果二叉排序树的左、右子树的高度之差的绝对值不超过 1 ,这样的二叉

                 排序树称为平衡二叉树。它的平均查找长度达到 O() 。

           》》 就维护表的有序性而言:

                   ### 二叉排序树

                             无须移动结点,只需要修改指针即可完成插入和删除操作,平均时间为O()

                   ###  二分查找

                             二分查找的对象是有序顺序表,若有插入和删除结点的操作,所花的代价是 O( n ) 

                    ###  静态查找表

                            当有序表是静态查找表时,宜用顺序表作为其存储结构,而采用二分查找实现其

                           查找操作。

                    ###  动态查找表

                             当有序表是动态查找表时,则应选择二叉排序树作为其逻辑结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达人Fighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值