这个二叉树可以平衡吗?

时间:2017-06-16 07:16:55

标签: binary-tree

我曾尝试实现代码来实现平衡二进制搜索树的方式(强力),我发现有一个(树的)情况,似乎无法平衡。树是

         6
          \
           10
          /
         8
        / \
       7   9

你可以明显发现这棵树的正确高度比左边的高度要大得多,所以我绕着'6'左转树,然后新的树就会

       10
      /
     6
      \
       8
      / \
     7   9

然后左边的高度远远大于它的右边高度,所以在下一步中我必须在节点'10'周围向右旋转(返回)树。

似乎必须有一个无限循环来围绕它的根节点旋转这个树(旋转左,右,左,右......等),同时平衡这棵树。有平衡这棵树的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您不应该首先围绕根旋转,而应首先旋转右子树,因为它也是不平衡的。

       10
      /
     8
    / \
   7   9

应旋转并转换为

     8
    / \
   7   10
      /
     9

然后树将

   6
    \
     8
    / \
   7   10
      /
     9

然后你绕着

旋转
    8
   / \
  6   10
   \   /
    7 9

答案 1 :(得分:1)

执行此操作的最简单算法是:

  1. 在此树中连续3个节点(在您的情况下为6,8,10)
  2. 订购那些节点
  3. 按顺序附加原始子树:空,7,9,空
  4. 那会产生:

         8
       /   \
      6     10
     / \   /  \
    .   7 9    .
    

    这棵树很平衡。