当我正在研究二进制树的中期时,我发现一个声明,任何任意的n节点二叉树都可以转换成任何其他n节点二进制树,最多2 * n-2个旋转。那有什么证据吗?我找到了一些渐近符号的证明,但不是那么清楚。我的意思是有人可以解释/说明为什么这是真的吗?如果它说n节点二叉树,它是否包含根?
答案 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树,我认为该语句是有效的,因为对节点的顺序没有限制。一个简单的数学归纳应该证明这个陈述。