顺序构建平衡二叉树

按{12, 24, 36, 90, 52, 30}的顺序构建平衡二叉树

第一步

12

第二步

12

        24

第三步

12

        24

                36

此时的结点12的平衡因子BF变成|-2|>1(右子树过高),要左旋(逆时针旋转),

  12  

    \

      24         24

       \        /  \

        36     12   36 

                左旋后

第四步

插入90, 结点24的BF是-1,二叉树仍然保持平衡.

      24

     /  \

    12   36 

          \

           90

第五步

插入52, 结点36的BF是-2,结点90的BF是+1,两个符号不一致,结点90和52先右旋,

    此时,结点52的BF是-1,结点36的BF是-2,再对结点36,52,90进行左旋.

       24             24                24

     /  \           /  \              /  \

    12   36            12   36                12    52

          \              \              / \

           90            52             36  90

          /                \

         52                90

                    右旋后             左旋后

第六步

插入30, 结点52的BF是+1,结点24的BF是-2,两个符号不一致,

    结点30,36和52先右旋,此时,结点36的BF是-1,结点24的BF是-2,

    结点12,24和36进行左旋.

        24                             24                                       36

      /        \                     /          \                              /          \

   12           52            12           36                       24           52

               /         \                    /         \                 /         \             \

            36          90              30          52            12        30            90

          /                                                      \

       30                                                        90

                                               右旋后                               左旋后

二叉排序树(BST树)的任何结点均满足:“若左子树存在,根结点大于其左子树上的所有结点;若右子树存,根结点小于其右子树上的所有结点。给定一个数据序列(所有数据互不相等),可以构造二叉排序树。例如:按照下面的数据序列及其先后顺序{ 10,30,20,7,5,6,2,9,28 }可构造出如下的二叉排序树。 image.png 平衡二叉树(AVL树)是一种二叉排序树,同时要求每个结点左右子树的高度最多相差为1。对上述数据序列,同样按照数据序列及其先后顺序构造平衡二叉树,可构造出如下的平衡二叉树,对序列中的数据元素进行查找,对于单个数据而言,平衡二叉树查找成功的比较次数不一定比二叉排序树小,但是,在每个数据元素查找的等概率下,平衡二叉树查找成功的平均查找长度要小于二叉排序树的平均查找长度。使用C或C++编写算法完成: (1)按给定数据序列及其顺序构建二叉排序树; (2)按给定数据序列及其顺序构建平衡二叉树; (3)计算并输出二叉排序树中所有数据元素在查找等概率下的平均查找长度; (4)计算并输出平衡二叉树中所有数据元素在查找等概率下的平均查找长度。 输入格式: 输入分为2行,第1行为数据元素个数,第2行为数据元素,其中个数据元素为整数。 输出格式: 输出分为2行,第1行为二叉排序树的平均查找长度,第2行为平衡二叉树的平均查找长度。平均查找长度位置输出所有数据元素查找成功的比较次数之和即可。这样输出就是一个整数了。 输入样例: 对于上面的数据序列,输入格式为: 9 10,30,20,7,5,6,2,9,28 输出样例: 对于上面的数据序列,输出格式为: BST-ASL:26 AVL-ASL:25 其中“BST-ASL:”和“AVL-ASL:”为二叉排序树和平衡二叉树的平均查找长度提示,其后为各自树中所有数据查找成功的比较次数之和。
最新发布
11-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值