【发布时间】:2015-12-22 12:31:00
【问题描述】:
假设我们有以下结构:
A
/ \
B C
/ \
D E
现在,如果要删除 C,
A
/
B
/ \
D E
此时,我研究的每个算法都会进行以下检查:
if (Balance-Factor(B)>=0) do **Left** rotation
else do **Left-Right** rotation;
但是,为什么这个条件必须在这里成立?例如,如果我要在上面的树上进行左右旋转,似乎我仍然会得到一棵平衡的树:
E
/ \
B A
/
D
那么,为什么在这种情况下,即使是左右旋转也能提供平衡的树,但我们只需要进行左旋转呢?
【问题讨论】:
-
没有发生单一的左旋转。这没有意义,因为树需要在右侧重新平衡
-
你说的右转,我说的就是左转。
-
好的。顺时针=右。逆时针 = 左。我就是这样学的,因为那是节点移动的方向
标签: algorithm binary-search-tree avl-tree