我需要在我的splay树中打印具有三个功能的zig,zigzig,zigzag旋转数:splay,插入和删除。我的splay函数似乎存在错误(更新z,zizi,ziza变量)。其余代码很好,并且树的结构符合预期。 这是我的splay函数(z,zizi,ziza是全局声明的变量):
Node* splay(Node *root,int data){
if(root==NULL || root->data==data){
return root;
}
if(root->data>data){
if(root->left==NULL){
return root;
}
if(root->left->data>data){
zizi+=1;
root->left->left=splay(root->left->left,data);
root=rightRotate(root);
}
else if(root->left->data<data){
ziza+=1;
root->left->right=splay(root->left->right,data);
if(root->left->right!=NULL){
root->left=leftRotate(root->left);
}
}
if(root->left==NULL){
z+=1;
return root;
}
else{
return rightRotate(root);
}
}
else{
if(root->right==NULL){
return root;
}
if(root->right->data<data){
zizi+=1;
root->right->right=splay(root->right->right,data);
root=leftRotate(root);
}
else if(root->right->data>data){
ziza+=1;
root->right->left=splay(root->right->left,data);
if(root->right->left!=NULL){
root->right=rightRotate(root->right);
}
}
if(root->right==NULL){
z+=1;
return root;
}
else{
return leftRotate(root);
}
}
}
当我执行以下主要功能时,我应该将z,zizi,ziza的值设为(3,4,5)。但我得到的这些值为(2,5,3)
main()
{
Node *root=NULL;
root = insert(root,50);
root = insert(root,20);
root = insert(root,40);
root = insert(root,60);
root = insert(root, 25);
root = insert(root, 45);
root = delete_key(root, 40);
root = insert(root, 75);
root=splay(root,50);
cout << "Preorder traversal of the modified Splay tree is \n";
preOrder(root);
cout<<z<<" "<<zizi<<" "<<ziza;
}
请帮助我。 预先谢谢你。