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; }
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; } } } } }