Algorithm 将一个二叉搜索树右转为另一个二叉搜索树的时间复杂度
如果通过仅对T1执行右旋转,可以从T1获得T2,则BST T1可右转换为另一BST T2。我需要证明此操作可以在^2$右旋转中完成 假设我们得到T1可右转换为T2。 我理解算法的递归性质,因为我们首先使T2的根必须位于T1最左边的路径中,才能右转换为T1的根,然后对T1的2个子树重复此过程 然而,我不能拿出一个例子来证明最坏的情况下的行为。我能够想到这两棵树,虽然我不知道如何证明这是最坏的情况Algorithm 将一个二叉搜索树右转为另一个二叉搜索树的时间复杂度,algorithm,recursion,time-complexity,binary-search-tree,Algorithm,Recursion,Time Complexity,Binary Search Tree,如果通过仅对T1执行右旋转,可以从T1获得T2,则BST T1可右转换为另一BST T2。我需要证明此操作可以在^2$右旋转中完成 假设我们得到T1可右转换为T2。 我理解算法的递归性质,因为我们首先使T2的根必须位于T1最左边的路径中,才能右转换为T1的根,然后对T1的2个子树重复此过程 然而,我不能拿出一个例子来证明最坏的情况下的行为。我能够想到这两棵树,虽然我不知道如何证明这是最坏的情况 Tree 1 Tree 2 6
Tree 1 Tree 2
6 1
/ \
5 2
/ \
4 3
/ \
3 4
/ \
2 6
/ /
1 5
通过从节点2开始向右旋转5+4+3+2次,可以将树1向右转换为T2
一般来说,如何找到需要$On^2$右旋转才能将一个BST转换为另一个BST的情况?校对草图:
让T1=V,E,n=V。考虑从T1开始的重复右转过程中出现的树木序列。对于任何给定的旋转,让“旋转锚点”表示旋转子树的根节点
意见1: 旋转任何给定的子树都不会更改其顶点集 意见2: 在给定子树的任意右旋转序列中,每个顶点最多为一次旋转锚点。在每次右旋转中,锚定将迁移到右子树中。右旋转后的新根从左子树开始;或者,请注意,每次旋转时,右子树将增长1个顶点;因此,对于子树S,存在最大VS-1旋转 意见3: 右旋转不会更改子树的数量任何树中的子树数等于可用根数V-1。因此,最大长度的右旋转序列涉及到子树,其中每个子树的旋转数为at max VS-1=共^2。是的,我想我明白你的意思。你也可以提供一个树T1和T2的例子,涉及最坏情况下的旋转次数,这样可以帮助我更好地可视化它。谢谢