使用旋转的二叉树变换

时间:2013-10-28 00:16:42

标签: algorithm math data-structures binary-tree tree-rotation

当我正在研究二进制树的中期时,我发现一个声明,任何任意的n节点二叉树都可以转换成任何其他n节点二进制树,最多2 * n-2个旋转。那有什么证据吗?我找到了一些渐近符号的证明,但不是那么清楚。我的意思是有人可以解释/说明为什么这是真的吗?如果它说n节点二叉树,它是否包含根?

2 个答案:

答案 0 :(得分:3)

这个答案来自CLRS第3版教科书问题13.2-4。

LEFT =整个左侧链表二进制树

RIGHT =整个右侧链表二叉树。

您可以轻松地将LEFT旋转到右侧 在(n-1)个旋转中。

e.g: n = 3 
    3              2              1
  2     to        1  3   to        2
1                                    3

证明: 根据定义,每次右旋转都会使最右边路径的长度增加至少1.因此,从最右边的路径开始,长度为1(最差情况),您需要进行最多(n-1)次旋转才能使其旋转进入右边。

因此,您可以很容易地得出结论,任意形状的具有n个节点的二叉树可以在(n-1)个旋转内旋转到右边。 让T_1成为您开始的节点 让T_2成为你结束的节点。

您可以在(n-1)次旋转内将T_1旋转到右侧。 同样的, 您可以在(n-1)圈内旋转T_2到RIGHT。

因此, 要将T_1旋转到T_2,只需将T_1旋转到右边, 然后进行反向旋转以从右旋转到T_2。

因此,您可以在上限的(n-1)+(n-1)= 2n-2个旋转中执行此操作。

Hope this helps!=)
Soon Chee Loong, 
University of Toronto 

答案 1 :(得分:0)

如果语句引用二叉树而不是BST树,我认为该语句是有效的,因为对节点的顺序没有限制。一个简单的数学归纳应该证明这个陈述。