小编典典

使用旋转的二叉树变换

algorithm

在我学习有关二叉树的中期课程时,我发现一条声明,可以将任意n节点二叉树转换为最多2 * n-2旋转的任何其他n节点二叉树。有什么证据吗?我找到了一些带有渐近符号的证明,但还不是很清楚。我的意思是有人可以解释/显示为什么如此吗?如果它说出n节点的二叉树,它是否包括根?


阅读 292

收藏
2020-07-28

共1个答案

小编典典

该答案来自《 CLRS第三版》教科书第13.2-4题。

LEFT =整个左链表二进制树

RIGHT =整个右链表二进制树。

您可以轻松(n-1)旋转将LEFT左右旋转。

例如:n = 3 
    3 2 1
  2比1 3比2
1 3

证明:根据定义,每次右旋转都会使最右路径的长度至少增加1。因此,从最右路径开始的长度为1(最坏的情况),最多需要执行(n-1)旋转才能达到使其正确。

因此,您可以轻松得出结论:具有(n-1)个旋转的任意形状的具有n个节点的二叉树都可以旋转为RIGHT。让T_1作为您开始的节点让T_2作为您开始的节点。

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

因此,要将T_1旋转为T_2,只需将T_1旋转为RIGHT,然后进行反向旋转即可将RIGHT旋转为T_2。

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

希望这会有所帮助!=)
很快志隆, 
多伦多大学
2020-07-28