treap 中的旋转是否会违反它的堆排序或二叉搜索树顺序?
Can rotations in treap violate it's heap-ordering or the binary search tree order?
我不确定我是否可以违反 treap 的堆排序或它的二叉搜索树结构,左 and/or 右旋转方法。
这是左旋的代码
typename BinarySearchTree<K, T>::BSTTreeNode* rightSon = (*node).getRightSon();
if (rightSon != nullptr)
{
typename BinarySearchTree<K,T>::BSTTreeNode* leftGreatSon = (*rightSon).getLeftSon();
(*node).setRightSon(leftGreatSon);
(*rightSon).setLeftSon(node);
}
和右旋
typename BinarySearchTree<K,T>::BSTTreeNode* leftSon = (*node).getleftSon();
if (leftSon != nullptr)
{
typename BinarySearchTree<K,T>::BSTTreeNode* rightGreatSon = (*leftSon).getRightSon();
(*leftSon).setRightSon(node);
(*node).setLeftSon(parent);
}
我希望这些旋转不会违反堆排序和二叉搜索树结构。
堆排序将被旋转破坏,因为给定一个根节点(X0,Y0),其子节点(X1,Y1)在旋转后,(X1,Y1)将成为根节点。由于根节点的 Y 值必须大于子节点的 Y 值,因此我们最初知道 Y0 > Y1。旋转后,Y1为根要求Y1 > Y0,这是不正确的。
不过,二叉搜索树的属性不会被旋转破坏。
我不确定我是否可以违反 treap 的堆排序或它的二叉搜索树结构,左 and/or 右旋转方法。
这是左旋的代码
typename BinarySearchTree<K, T>::BSTTreeNode* rightSon = (*node).getRightSon();
if (rightSon != nullptr)
{
typename BinarySearchTree<K,T>::BSTTreeNode* leftGreatSon = (*rightSon).getLeftSon();
(*node).setRightSon(leftGreatSon);
(*rightSon).setLeftSon(node);
}
和右旋
typename BinarySearchTree<K,T>::BSTTreeNode* leftSon = (*node).getleftSon();
if (leftSon != nullptr)
{
typename BinarySearchTree<K,T>::BSTTreeNode* rightGreatSon = (*leftSon).getRightSon();
(*leftSon).setRightSon(node);
(*node).setLeftSon(parent);
}
我希望这些旋转不会违反堆排序和二叉搜索树结构。
堆排序将被旋转破坏,因为给定一个根节点(X0,Y0),其子节点(X1,Y1)在旋转后,(X1,Y1)将成为根节点。由于根节点的 Y 值必须大于子节点的 Y 值,因此我们最初知道 Y0 > Y1。旋转后,Y1为根要求Y1 > Y0,这是不正确的。
不过,二叉搜索树的属性不会被旋转破坏。