struct tnode *addtree(struct tnode *p, char *w, int lnum)
{
    int cond, i;

    if (p == NULL) {
        p = talloc();
        p->word = strdupX(w);
        p->count = 1;
        p->left = p->right = NULL;
        for (i = 0; i < MAXLINENUM; ++i)
            p->line_nums[i] = 0;
        addLineNum(p->line_nums, lnum);
    } else if ((cond = strcmp(w, p->word)) == 0) {
        p->count++;
        addLineNum(p->line_nums, lnum);
    } else if (cond < 0)
        p->left = addtree(p->left, w, lnum);
    else
        p->right = addtree(p->right, w, lnum);
    return p;
}
Example #2
0
void Tree::addNode(Token *newToken, int scannerLineNum)//add a node to the tree
{
    LinkedList *lineNumber = new LinkedList();
    lineNumber->setLineNum(scannerLineNum);
    
    if(root == NULL)//checks for emptiness so it can put the new node here
    {
        root->data = newToken;
    }
    else
    {
        treeNode *current = root;
        while(current != NULL)
        {
            if(newToken->getTokenString().compare(current->data->getTokenString()))
            {
                if(current->left != NULL)//checks left for null
                {
                    current = current->left;//move to left
                    
                }
                else
                {
                    current->left->data = newToken; //fill left node with data
                    addLineNum(lineNumber, scannerLineNum);//add a lline number
                    current = NULL;
                }
            }
            else
            {
                if(current->right != NULL)//check right for NULL
                {
                    current = current->right;//move to right
                }
                else
                {
                    current->right->data = newToken;//fill right node with data
                    current = NULL;
                }
            }
        }
    }
}