如何在八叉树中打印锯齿形,锯齿形和锯齿形旋转数

时间:2019-10-11 15:19:36

标签: c++ data-structures tree

我需要在我的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;   
} 

请帮助我。 预先谢谢你。

0 个答案:

没有答案