Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
请问高手这个为什么会runtime error#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef struct node{ char tel[8]; int tel_num; int balance; //平衡因子 struct node *left; struct node *right; }STDTEL, *PSTDTEL; void inorder(PSTDTEL root){ if(root!=NULL){ inorder(root->left); if(root->tel_num > 1){ for(int i=0;i<3;i++) printf("%c",root->tel[i]); printf("-%s %d\n",&root->tel[3],root->tel_num); } inorder(root->right); } } void LeftRotate(PSTDTEL * Ptr){ PSTDTEL tmp=(*Ptr)->right; (*Ptr)->right=tmp->left; tmp->left=*Ptr; *Ptr=tmp; } void RightRotate(PSTDTEL * Ptr) { PSTDTEL tmp=(*Ptr)->left; (*Ptr)->left=tmp->right; tmp->right=*Ptr; *Ptr=tmp; } void LeftRightRotate(PSTDTEL * Ptr) { LeftRotate(&(*Ptr)->left); RightRotate(Ptr); } void RightLeftRotate(PSTDTEL * Ptr) { RightRotate(&(*Ptr)->right); LeftRotate(Ptr); } int Insert(PSTDTEL *root,char* temptel) { //返回值表明树是否长高 int taller; if(*root==NULL){ *root=(PSTDTEL)malloc(sizeof(STDTEL)); strcpy((*root)->tel,temptel); (*root)->left = NULL; (*root)->right = NULL; (*root)->tel_num=1; (*root)->balance=0; return 1; }else if(strcmp(temptel,(*root)->tel) == 0){ (*root)->tel_num ++; }else if(strcmp(temptel,(*root)->tel)>0){ taller=Insert(&(*root) ->right,temptel); if(taller==1)//右子树长高了 switch((*root)->balance) { case 0: (*root)->balance=1; break; case -1: (*root)->balance=0; taller=0; break; case 1: //应该左旋或者先右后左双旋 if((*root)->right->balance==1){//应该左旋,并调整平衡因子 LeftRotate(root); (*root)->balance=0; (*root)->left->balance=0; } else if((*root)->right->balance==-1) { //应该双旋,并调整平衡因子 if((*root)->right->left->balance==1){ (*root)->balance=-1; (*root)->right->balance=0; } else { (*root)->balance=0; (*root)->right->balance=1; } (*root)->right->left->balance=0; RightLeftRotate(root); } taller=0; break;//平衡了,没长高 }//switch return taller; } else if(strcmp(temptel,(*root)->tel)<0){ taller=Insert(&(*root)->left,temptel); if(taller==1)//左子树长高了 switch((*root)->balance){ case 0: (*root)->balance=-1; break; case 1: (*root)->balance=0; taller=0; break; case -1: //应该右旋或者先左后右双旋 if((*root)->left->balance==-1) { RightRotate(root); (*root)->balance=0; (*root)->right->balance=0; } else if((*root)->left->balance==1){ if((*root)->left->right->balance==1) { (*root)->balance=0; (*root)->left->balance=-1; }else { (*root)->balance=1; (*root)->left->balance=0; } (*root)->left->right->balance=0; LeftRightRotate(root); } taller=0; break;//平衡了,没长高 }//switch return taller; } return 0; } int main() { int case_num,headchange = 0; int i,j,k; char tels[20], temptel[8]; PSTDTEL telroot = NULL; scanf("%d",&case_num); for(i=0;i<case_num;i++){ scanf("%s",tels); k = 0; for(j=0;j<strlen(tels);j++){ if(tels[j] == '-') continue; if(tels[j] >= 'A' && tels[j] <= 'P'){ temptel[k++] = (tels[j]-'A')/3+'2'; continue; } if(tels[j] >= 'R' && tels[j] <= 'Y'){ temptel[k++] = (tels[j]-'A'-1)/3+'2'; continue; }else temptel[k++] = tels[j]; } temptel[7] = 0; Insert(&telroot,temptel); } inorder(telroot); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator