简单的平衡二叉树

已知一个长度为11的线性表List=(12, 24, 36, 90, 52, 30, 41, 8, 10, 38, 61),试回答下面问题
(1)将线性表元素依次插入一个空的平衡二叉树,画出所得平衡二叉树,如果假设每个元素查找概率相同,则平均查找长度为多少?

(1) 插入12, 这是第一个结点,是根结点.

(2) 插入24, 比12大,作为12的右分支.

    12

     \

      24

(3) 插入36, 结点12的平衡因子BF变成-2(右子树过高),要左旋(逆时针旋转),

    此时,结点24成为根结点.

    平衡因子BF(Balance Factor)就是:

    将二叉树上结点的 左子树深度 减去 右子树深度的值.

    12  

     \

      24         24

       \        /  \

        36     12   36 

                左旋后

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

      24

     /  \

    12   36 

          \

           90

(5) 插入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

                    右旋后             左旋后

(6) 插入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

                       右旋后               左旋后

(7) 插入41, 二叉树仍然保持平衡.

          36

        /    \

       24    52

      / \    / \

    12  30  41  90

(8) 插入8, 二叉树仍然保持平衡.

           36

         /    \

        24    52

       / \    / \

     12  30  41  90

     /

    8

(9) 插入10, 结点8的BF是-1,结点12的BF是+2,结点24的BF是+2,

    结点8和10先左旋,此时,结点10的BF是+1,结点12的BF是+2,

    对结点10,8,12进行右旋.

           36                    36                  36

         /    \                /    \              /     \

        24    52              24    52            24     52

       / \    / \            / \    / \          / \     / \

     12  30  41  90        12  30  41  90       10  30  41  90

     /                     /                   / \

    8                     10                  8  12

     \                   /

      10                8

                               左旋后              右旋后

(10) 插入38, 二叉树仍然保持平衡.

              36

          /        \

         24        52

        / \       /  \

      10   30    41  90

      / \       /

     8  12     38

(11) 插入61, 二叉树仍然保持平衡.

              36

          /        \

         24        52

        / \       /  \

      10   30    41  90

      / \       /    /

     8  12     38   61

    这就是最后得到的平衡二叉树

   

二叉树的总结点数 N=11

如果假设每个元素查找概率相同,平均查找长度是 log2(N)=log2(11),

表示以2为底,取11的对数.

猜你喜欢

转载自blog.csdn.net/qq_41598072/article/details/86410221