밸 런 스 트 리 Treap 모드

자신 이 정리 한 밸 런 스 트 리 Treap 모델 은 자신 이 테스트 해 보 았 는데 틀린 것 이 없 는 것 같 지만 bug 가 있 는 것 같 습 니 다. 여러분 께 서 가르쳐 주세요. 다음은 자신 이 테스트 할 때 쓴 테스트 용 코드 입 니 다. 무시 하 세 요.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int maxn=100010;
struct Treap_Node{
    Treap_Node *left,*right;
    int value,fix;//fix    ,      ,              
};
Treap_Node *root;
void Treap_Print(Treap_Node *P){//      
    if(P){
        Treap_Print(P->left);
        printf("%d
",P->value); Treap_Print(P->right); } } void Treap_Left_Rotate(Treap_Node *&a){// Treap_Node *b=a->right; a->right=b->left; b->left=a; a=b; } void Treap_Right_Rotate(Treap_Node *&a){// Treap_Node *b=a->left; a->left=b->right; b->right=a; a=b; } int Treap_Find(Treap_Node *P,int value){// value if(!P) return 0; if(P->value==value) return 1; else if(value<P->value) return Treap_Find(P->left,value); else return Treap_Find(P->right,value); } void Treap_Insert(Treap_Node *&P,int value){// if(!P){ P=new Treap_Node; P->left=P->right=NULL;// P->value=value; P->fix=rand(); } else if(value<=P->value){ Treap_Insert(P->left,value); if(P->left->fix<P->fix) Treap_Right_Rotate(P); } else{ Treap_Insert(P->right,value); if(P->right->fix<P->fix) Treap_Left_Rotate(P); } } void Treap_Delete(Treap_Node *&P,int value){// if(value==P->value){ if(!P->right||!P->left){// Treap_Node *t=P; if(!P->right) P=P->left; else P=P->right; delete t; }else{ if(P->left->fix<P->right->fix){// , Treap_Right_Rotate(P); Treap_Delete(P->right,value); }else{// , Treap_Left_Rotate(P); Treap_Delete(P->left,value); } } }else if(value<P->value) Treap_Delete(P->left,value); else Treap_Delete(P->right,value); } int main(){ int m,a; char ch; while(scanf("%d",&m)!=-1){ root=NULL; Treap_Insert(root,2); Treap_Insert(root,3); Treap_Insert(root,1); Treap_Print(root); while(m--){ getchar(); scanf("%c",&ch); if(ch=='F'){ scanf("%d",&a); int t=Treap_Find(root,a); if(t) printf("Found
"); else printf("Not Found
"); }else if(ch=='I'){ scanf("%d",&a); Treap_Insert(root,a); }else if(ch=='P'){ Treap_Print(root); }else if(ch=='D'){ scanf("%d",&a); Treap_Delete(root,a); } } } return 0; }

좋은 웹페이지 즐겨찾기