// ----------------------------------------------------------------------------- // Insert a Full path of Items and creates all new nodes TreeNode *TreeInsertItems(Tree *tree, TreeNode *parent, HTTPCHAR *strpath) { TreeNode *node; HTTPCHAR *str = _tcsdup(strpath); int IsFolder = (str[strlen(str) - 1] == '/'); HTTPCHAR *path = _tcstok(str, "/"); if (!path) { node = TreeInsert(tree, parent, ""); } else { TreeNode *currentparent = parent; Tree *base = tree; do { node = TreeInsert(base, currentparent, path); path = _tcstok(NULL, "/"); if ((path) || (IsFolder)) { if (!node->SubItems) { node->SubItems = TreeInitialize("/"); } currentparent = node; base = node->SubItems; } else { break; } } while (path != NULL); } free(str); return (node); }
//------------------------------------------------------------------------------ void TreeInsert( node ** rootRef, int value ){ if( *rootRef == nullptr ){ *rootRef = new node; (*rootRef)->data = value; (*rootRef)->left = nullptr; (*rootRef)->right = nullptr; }else{ if( value < (*rootRef)->data ){ TreeInsert( &((*rootRef)->left), value ); }else{ TreeInsert( &((*rootRef)->right), value ); } } }
int _CDECL main( int argc, char *argv[] ) { PTREE_NODE Root; ULONG i; ULONG Seed; DbgPrint("Start SplayTest()\n"); Root = NULL; Seed = 0; for (i=0; i<2048; i++) { Buffer[i].Data = RtlRandom(&Seed); Buffer[i].Data = Buffer[i].Data % 512; RtlInitializeSplayLinks(&Buffer[i].Links); Root = TreeInsert(Root, &Buffer[i]); } PrintTree(Root); DbgPrint("End SplayTest()\n"); return TRUE; }
int main(int argc, char **argv) { //freopen("in.txt", "r", stdin); char szBuffer[25]; int res = 0, n, i, j, len; scanf("%d", &n); for (i = 0; i < n; ++i) { scanf("%s", szBuffer); len = strlen(szBuffer); for (j = 0; j < len; ++j) { TreeInsert(szBuffer+j, i); } } scanf("%d", &n); for (i = 0; i < n; ++i) { scanf("%s", szBuffer); printf("%d\n", TreeQuery(szBuffer)); } TreeDelete(&root); return 0; }
node * CreateTree( T xs ){ node * root = nullptr; for( auto x: xs ){ TreeInsert( &root, x ); } return root; }
Tree* TreeInsert(Tree** tree, void* element, Tree* parent, int (*comp)(const void*, const void*)) { if ( !*tree ) { TreeInit(tree); (*tree)->parent = parent; (*tree)->data = element; return *tree; } else { if ( (*comp)(element, (*tree)->data) < 0 ) { return TreeInsert(&(*tree)->left, element, *tree, comp); } else { return TreeInsert(&(*tree)->right, element, *tree, comp); } } }
FOLDER* DbaseAddFolder( FOLDER* folder, TAG tag ) { FOLDER** gnew ; gnew = (FOLDER**) TreeInsert( folder->kids, kid_cmp, tag ) ; if( *gnew ) { IOerror( IO_WARN, "DbaseAddFolder", "%s/%s already exists\n", TagString( folder->tag ), TagString( tag ) ) ; return *gnew ; // already exists! } *gnew = new FOLDER ; (*gnew)->tag = tag ; return *gnew ; }
int main(int argc, char **argv) { //freopen("in.txt", "r", stdin); char szBuffer[16]; int res = 0; TreeCreate(); while (1) { gets(szBuffer); if (strlen(szBuffer) == 0) break; TreeInsert(szBuffer); } while (EOF != scanf("%s", szBuffer)) { res = TreeQuery(szBuffer); printf("%d\n", res); } TreeDelete(root); return 0; }
TreeNode* bTree::TreeInsert(HTTPCSTR str) { return (TreeInsert(str, NULL)); }
/*VARARGS0*/ void IOerror( const io_code level, const char *routine, const char *format, ... ) { va_list args ; char *lev_name, line[LENGTH], *p, **msg ; int ret, length ; va_start( args, format ) ; if( level == IO_OK ) /* ignore message */ { va_end( args ) ; return ; } switch( level ) { case IO_NOTE: lev_name = "Note" ; break ; case IO_WARN: lev_name = "Warning" ; break ; case IO_ERR: lev_name = "Error" ; break ; case IO_FATAL: lev_name = "Fatal Error" ; break ; default: lev_name = "???" ; } length = LENGTH - 1 ; line[length] = '\0' ; /* just in case... */ p = line ; if( ABORT ) { ret = snprintf( p, length, "ABORT -- " ) ; if( ret == -1 ) length = 0 ; else { length -= ret ; p += ret ; } } ret = snprintf( p, length, "%s in %s: ", lev_name, routine ) ; if( ret == -1 ) length = 0 ; else { length -= ret ; p += ret ; } ret = vsnprintf( p, length, format, args ) ; if( ret == -1 ) length = 0 ; else { length -= ret ; p += ret ; } (void) snprintf( p, length, "\n" ) ; msg = (char **) TreeInsert( tree, cmp, line ) ; if( !*msg ) { *msg = strdup( line ) ; (void) fprintf( stderr, "%s", line ) ; } #ifdef OLDSTUFF (void) fprintf( stderr, "%s in %s: ", lev_name, routine ) ; (void) vfprintf( stderr, format, args ) ; (void) fprintf( stderr, "\n" ) ; #endif va_end( args ) ; if( level == IO_FATAL ) { if( !ABORT && IOabort ) { ABORT = 1 ; /* prevent a loop */ IOabort() ; /* user cleanup routine */ } p = (char *) 0 ; *p = 'x' ; // damned abort doesn't work in gdb (void) abort() ; } }
main () { tree_sTable *tp; sNode *np; int key; int i; char s[256]; char *cp; char c; tp = tree_CreateTable(sizeof(int), offsetof(sNode, key), sizeof(sNode), 100, tree_eComp_int32, NULL); for (i = 0; i < 1000; i += 10) { tree_Insert(tp, &i); } for ( ;;) { printf("Command: "); cp = gets(s); c = s[0]; if (cp == NULL || c == '\0') { printf("\nGoodbye\n"); return; } switch (c) { case 'i': case 'I': printf("Insert, Key: "); gets(s); key = atoi(s); if (tree_Find(tp, &key) == NULL) { tree_Insert(tp, &key); } else printf("\nKey allready exists!\n"); break; case 'd': case 'D': printf("Delete, Key: "); gets(s); key = atoi(s); if ((np = tree_Find(tp, &key)) != NULL) { tree_Remove(tp, &key); } else printf("\nKey does not exist!\n"); break; case 'f': case 'F': printf("Find, Key: "); gets(s); key = atoi(s); if ((np = tree_Find(tp, &key)) == NULL) { printf("\nKey does not exist!\n"); } else printf("\nKey exists! %d\n", np->key); break; case 's': case 'S': printf("Find successor, Key: "); gets(s); key = atoi(s); if ((np = tree_FindSuccessor(tp, &key)) == NULL) { printf("\nKey does not exist!\n"); } else printf("\nKey exists! %d\n", np->key); break; case 'p': case 'P': printf("Find predecessor, Key: "); gets(s); key = atoi(s); if ((np = tree_FindPredecessor(tp, &key)) == NULL) { printf("\nKey does not exist!\n"); } else printf("\nKey exists! %d\n", np->key); break; #if 0 case 't': case 'T': printf("Start: "); gets(s); start = atoi(s); printf("Stop: "); gets(s); stop = atoi(s); printf("Order: "); gets(s); c = s[0]; switch (c) { case 's': case 'S': printf("\navl-tree\n"); i = start; j = stop; sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { if (TreeSearch(tp,i) == tp->Null) { np = TreeAlloc(tp, i); TreeInsert(tp, np); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); i = start; j = stop; printf("\nlib$tree\n"); sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { sts = lib$lookup_tree(<p, i, Compare, &lnp); if (!(sts & 1)) { lib$insert_tree(<p, i, &0, Compare, Alloc, &lnp, 0); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); break; case 'd': case 'D': i = start; j = stop; sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { if ((np = TreeSearch(tp,i)) != tp->Null) { TreeDelete(tp, np); } else { printf("Could not find %d\n", i); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); break; case 'f': case 'F': printf("\navl-tree\n"); i = start; j = stop; sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { if ((np = TreeSearch(tp,i)) != tp->Null) { } else { printf("Could not find %d\n", i); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); i = start; j = stop; printf("\nlib$tree\n"); sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { sts = lib$lookup_tree(<p, i, Compare, &lnp); } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); break; case 'b': case 'B': i = start; j = stop; sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; j--) { if (TreeSearch(tp,j) == tp->Null) { np = TreeAlloc(tp, j); TreeInsert(tp, np); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); break; case 'r': case 'R': i = start; j = stop; sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); cpu = cputim; page = pageflts; for (; i <= j; i++) { k = 65535 & rand(); if (TreeSearch(tp,k) == tp->Null) { np = TreeAlloc(tp, k); TreeInsert(tp, np); } } sts = sys$getjpiw(0, &pid, 0,item_list, 0, 0, 0); printf("Cputim: %d, Pageflts: %d\n", cputim - cpu, pageflts - page); break; default: printf("Illegal order!\n"); break; } break; case 'p': case 'P': tp->ErrorCount = 0; tp->HZCount = 0; tp->HNCount = 0; tp->HPCount = 0; maxlevel = 0; count = 0; hight = 0; TreePrint(tp, tp->Root, NULL, NULL,0); TreeCheck (tp, tp->Root, &count, &maxlevel, &hight, 0); printf("Hight: %d\n", hight); #if 0 TreePrintInorder(tp, tp->Root, 0); #endif sp = TreeMinimum(tp, tp->Root); ep = TreeMaximum(tp, tp->Root); op = sp; for (np = TreeSuccessor(tp, op); op != ep; np = TreeSuccessor(tp, np)) { #if 0 printf("Key: %d\n", op->Key); #endif if (op->Key >= np->Key) tp->ErrorCount++; op = np; } printf("Hight.......: %d\n", hight); printf("Insert......: %d\n", tp->Insert); printf("Search......: %d\n", tp->Search); printf("Delete......: %d\n", tp->Delete); printf("NodeCount...: %d\n", tp->NodeCount); printf("FreeCount...: %d\n", tp->FreeCount); printf("MaxDepth....: %d\n", tp->MaxDepth); printf("HZCount.....: %d\n", tp->HZCount); printf("HNCount.....: %d\n", tp->HNCount); printf("HPCount.....: %d\n", tp->HPCount); printf("LLCount.....: %d\n", tp->LLCount); printf("LRCount.....: %d\n", tp->LRCount); printf("RLCount.....: %d\n", tp->RLCount); printf("RRCount.....: %d\n", tp->RRCount); printf("AllocCount..: %d\n", tp->AllocCount); printf("MallocCount.: %d\n", tp->MallocCount); printf("ErrorCount..: %d\n", tp->ErrorCount); count = maxlevel = 0; Print(ltp, &count, &maxlevel, 0); printf("\nlib$tree\n"); printf("Count.......: %d\n", count); printf("MaxDepth....: %d\n", maxlevel); break; case 'l': case 'L': TreePrintInorder(tp, tp->Root, 0); break; #endif case 'q': case 'Q': printf("\nGoodbye\n"); return; break; default: printf("Illegal command!\n"); break; } } }