Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <class T>
- void BinarySearchTree<T>::insert(T element,int linia, int posicio, Position<T>* node){
- if (arrel == nullptr){//si l'arbre es buit, tenint en compte que no tenim delete aixo no passara perque
- //quan iniciem l'arbre ja creem l'arrel pero si implementesim el delete seria util aquesta condicio
- Position<T>* nouNode = new Position<T>(element,linia,posicio);//creem nou node
- arrel = nouNode;//Aquest nou node es l'arrel
- nouNode->setParent(nullptr);//el seu pare es null
- numNodes++;//Augmentem el nombre de nodes
- }else{
- if(!search(element,arrel)){
- if (element < node->getElement() && node->getLeft() != nullptr){//si l'element a inserir es mes petit i l'esquerra no es null
- return insert(element,linia, posicio, node->getLeft());//fem recursivitat cap a l'esquerra
- }
- if (element > node->getElement() && node->getRight() != nullptr){//si l'element a inserir es mes gran i el dret no es null
- return insert(element,linia, posicio, node->getRight());//fem recursivitat cap a la dreta
- }
- if (element < node->getElement() && node->getLeft() == nullptr){//si l'element es mes petit pero l'esquerra es null
- Position<T>* nouNode = new Position<T>(element, linia, posicio);//creem el nou node a afegir
- nouNode->setParent(node);//posem com a pare del nou node el node pasat per parametre
- node->setLeft(nouNode);//posem com a fill esquerre el nou node
- numNodes++;//Augmentem el nombre de nodes
- }
- if (element > node->getElement() && node->getRight() == nullptr){//si l'element es ems gran pero el dret es null
- Position<T>* nouNode = new Position<T>(element, linia, posicio);//creem el nou node a afegir
- nouNode->setParent(node);//posem com a pare del nou node el node passat per parametre
- node->setRight(nouNode);//posem com a fill dret el nou node
- numNodes++;//augmentem el nombre de nodes
- }
- }else{
- bool repetit=false;
- Position<string>* node = searchElement(element,arrel);
- vector<Occurence*> valors=node->getTotal();
- int i=0;
- while(!repetit && i<valors.size()){
- for(int idx = 0; idx < valors.size(); idx++){
- repetit=(valors.at(idx).getLinia()==linia)&&(valors.at(idx).getPosicio());
- }
- }
- if(!repetit){
- node->setValues(linia, posicio);
- }}
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement