我曾尝试实现代码来实现平衡二进制搜索树的方式(强力),我发现有一个(树的)情况,似乎无法平衡。树是
6
\
10
/
8
/ \
7 9
你可以明显发现这棵树的正确高度比左边的高度要大得多,所以我绕着'6'左转树,然后新的树就会
10
/
6
\
8
/ \
7 9
然后左边的高度远远大于它的右边高度,所以在下一步中我必须在节点'10'周围向右旋转(返回)树。
似乎必须有一个无限循环来围绕它的根节点旋转这个树(旋转左,右,左,右......等),同时平衡这棵树。有平衡这棵树的解决方案吗?
答案 0 :(得分:2)
您不应该首先围绕根旋转,而应首先旋转右子树,因为它也是不平衡的。
此
10
/
8
/ \
7 9
应旋转并转换为
8
/ \
7 10
/
9
然后树将
6
\
8
/ \
7 10
/
9
然后你绕着
旋转 8
/ \
6 10
\ /
7 9
答案 1 :(得分:1)
执行此操作的最简单算法是:
那会产生:
8
/ \
6 10
/ \ / \
. 7 9 .
这棵树很平衡。