C to C++ online Converter
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _tree { char v[18]; int len, index, plus_l, plus_r; struct _tree *l, *r; } Tree; void Ins(Tree **t, char *val, int val_len, int indeks) { if(!(*t)) { *t = (Tree*)malloc(sizeof(Tree)); strcpy((*t)->v, val); (*t)->len = val_len; (*t)->index = indeks; (*t)->plus_l = (*t)->plus_r = 0; (*t)->l = (*t)->r = NULL; } else if(((*t)->len > val_len) || (((*t)->len == val_len) && (strcmp((*t)->v, val) > 0))) { if((*t)->r) Ins(&(*t)->r, val, val_len, 1); else { Ins(&(*t)->r, val, val_len, (*t)->index + 1); (*t)->plus_r = 0; } } else { (*t)->index += 1; (*t)->plus_r += 1; if((*t)->l) Ins(&(*t)->l, val, val_len, 1); else { Ins(&(*t)->l, val, val_len, (*t)->index - 1); (*t)->plus_l = 0; } } } int Find(Tree **t, char *val, int val_len) { if(*t) { if(strcmp((*t)->v, val) == 0) { printf("%dn", (*t)->index); return 1; } else if(((*t)->len > val_len) || (((*t)->len == val_len) && (strcmp((*t)->v, val) > 0))) { if((*t)->plus_r) { if((*t)->r) { int t_plus_r = (*t)->plus_r; (*t)->r->index += t_plus_r; (*t)->r->plus_l += t_plus_r; (*t)->r->plus_r += t_plus_r; } (*t)->plus_r = 0; } return Find(&(*t)->r, val, val_len); } else { if((*t)->plus_l) { if((*t)->l) { int t_plus_l = (*t)->plus_l; (*t)->l->index += t_plus_l; (*t)->l->plus_l += t_plus_l; (*t)->l->plus_r += t_plus_l; } (*t)->plus_l = 0; } return Find(&(*t)->l, val, val_len); } } else return 0; } int main() { int T, cmd, len; scanf("%d", &T); Tree *t = NULL; char val[18]; while(T--) { scanf("%d %s", &cmd, val); len = strlen(val); if(cmd == 1) Ins(&t, val, len, 1); else if(!Find(&t, val, len)) printf("Data tidak adan"); } return 0; }