Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基于旋转的二叉树变换_Algorithm_Math_Data Structures_Binary Tree_Tree Rotation - Fatal编程技术网

Algorithm 基于旋转的二叉树变换

Algorithm 基于旋转的二叉树变换,algorithm,math,data-structures,binary-tree,tree-rotation,Algorithm,Math,Data Structures,Binary Tree,Tree Rotation,当我在学习关于二叉树的中期课程时,我发现了一种说法,任何任意的n节点二叉树都可以转换成任何其他n节点二叉树,最多旋转2*n-2次。有证据证明吗?我找到了一些带有渐近符号的证明,但不是很清楚。我的意思是有人能解释/说明为什么这是真的吗?如果它说n节点二叉树,它包括根吗?如果该语句引用的是二叉树而不是BST树,我认为该语句是有效的,因为没有关于节点顺序的限制。一个简单的数学归纳应该能证明这一说法。这个答案来自CLRS第三版教科书问题13.2-4 让 LEFT=整个左链表二叉树 RIGHT=整个右链表

当我在学习关于二叉树的中期课程时,我发现了一种说法,任何任意的n节点二叉树都可以转换成任何其他n节点二叉树,最多旋转2*n-2次。有证据证明吗?我找到了一些带有渐近符号的证明,但不是很清楚。我的意思是有人能解释/说明为什么这是真的吗?如果它说n节点二叉树,它包括根吗?

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

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

LEFT=整个左链表二叉树

RIGHT=整个右链表二叉树

您可以轻松地从左向右旋转 在(n-1)个旋转中

e.g: n = 3 3 2 1 2 to 1 3 to 2 1 3 e、 g:n=3 3 2 1 2比1比3比2 1 3 证明: 因为根据定义,每次向右旋转将使最右侧路径的长度至少增加1。因此,从长度为1(最坏情况)的最右侧路径开始,最多需要执行(n-1)个旋转才能使其进入右侧

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

您可以在(n-1)圈内向右旋转T_1。 同样地, 您可以在(n-1)圈内向右旋转T_2

e.g: n = 3 3 2 1 2 to 1 3 to 2 1 3 所以,, 要将T_1旋转到T_2,只需将T_1旋转到右侧, 然后进行反向旋转,从右侧旋转到T_2

因此,可以在上界的(n-1)+(n-1)=2n-2次旋转中执行此操作

Hope this helps!=) Soon Chee Loong, University of Toronto 希望这有帮助!=) 孙志龙, 多伦多大学
这听起来不对,因为旋转不会改变节点的顺序。你确定没有其他限制吗?也许你想参考这篇论文。