示例#1
0
// -----------------------------------------------------------------------------
// 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 );
        }
    }
}
示例#3
0
文件: tsplay.c 项目: mingpen/OpenNT
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;

}
示例#4
0
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;
}
示例#6
0
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);
    }
  }
}
示例#7
0
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 ;
    }
示例#8
0
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;
}
示例#9
0
TreeNode* bTree::TreeInsert(HTTPCSTR str) {
    return (TreeInsert(str, NULL));
}
示例#10
0
文件: io.c 项目: skewray/skewray_old
/*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() ;
	}
    }
示例#11
0
文件: co_tree.c 项目: Strongc/proview
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(&ltp, i, Compare, &lnp);
                    if (!(sts & 1)) {
                        lib$insert_tree(&ltp, 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(&ltp, 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;
        }
    }
}