I have a Programming is Binary Tree Search BTS for strings w

I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays.

Can you help me to change the method, please?

This is programming:

#include <iostream>

#include <cstdlib>

#include <string>

using namespace std;

struct myNode

{

string data;

struct myNode *lNode;

struct myNode *rNode;

} *roNode;

class myBTS

{

public:

void seek(string, myNode **, myNode **);

void add(myNode *, myNode*);

void rem(string);

void caseOne(myNode *, myNode *);

void caseTwo(myNode *, myNode *);

void caseThree(myNode *, myNode *);

void print(myNode *, char);

myBTS()

{

roNode = NULL;

}

};

// Main method

int main ()

{

int myOptions;

string rData;

myBTS mybst;

myNode *tmp;

while (1)

{

cout << \"-----------------------------------------\" << endl;

cout << \"Welcome to Binary Search Tree Programming\" << endl;

cout << \"-----------------------------------------\" << endl;

cout << \"1. Add Data \" << endl;

cout << \"2. Remove Data \" << endl;

cout << \"3. Print Data \" << endl;

cout << \"4. Exit \" << endl;

cout << \"Enter Option : \";

cin >> myOptions;

switch(myOptions)

{

case 1:

tmp = new myNode;

cout << \"Enter data to add : \";

cin >> tmp->data;

mybst.add(roNode, tmp);

break;

case 2:

if (roNode == NULL)

{

cout << \"Tree empty!!!\" << endl;

continue;

}

else

{

cout << \"Enter data to remove: \";

cin >> rData;

mybst.rem(rData);

}

break;

case 3:

cout << \"Print Tree:\" << endl;

mybst.print(roNode,1);

cout << endl;

break;

case 4:

exit (1);

default:

cout << \"Wrong Option!!!\" << endl;

}

}

}

// Data in BTS

void myBTS::seek(string sData, myNode **myPar, myNode **myLoc)

{

myNode *ptr1, *ptr2;

if (roNode == NULL)

{

*myLoc = NULL;

*myPar = NULL;

return;

}

if (sData == roNode-> data)

{

*myLoc = roNode;

*myPar = NULL;

return;

}

if (sData < roNode-> data)

ptr1 = roNode->lNode;

else

ptr1 = roNode-> rNode;

ptr2 = roNode;

  

while (ptr1 != NULL)

{

if (sData == ptr1->data)

{

*myLoc = ptr1;

*myPar = ptr2;

return;

}

ptr2 = ptr1;

if (sData < ptr1 -> data)

ptr1 = ptr1 ->lNode;

else

ptr1 = ptr1 -> rNode;

}

*myLoc = NULL;

*myPar = ptr2;

}

// Add Data into BTS

void myBTS::add(myNode *myTree, myNode *myNewNode)

{

if (roNode == NULL)

{

roNode = new myNode;

roNode -> data = myNewNode ->data;

roNode -> lNode = NULL;

roNode -> rNode = NULL;

cout << \"Root data is added successfully\" << endl;

return;

}

if (myTree -> data == myNewNode -> data)

{

cout << \"Data already in BTS\" << endl;

return;

}

if (myTree -> data > myNewNode -> data)

{

if (myTree ->lNode != NULL)

{

add (myTree -> lNode, myNewNode);

}

else

{

myTree -> lNode = myNewNode;

(myTree -> lNode) -> lNode = NULL;

(myTree -> lNode) -> rNode = NULL;

cout << \"Data added to the Left successfully\" << endl;

return;

}

}

if (myTree -> rNode != NULL)

{

add(myTree -> rNode, myNewNode);

}

else

{

myTree -> rNode = myNewNode;

(myTree -> rNode) -> lNode = NULL;

(myTree -> rNode) -> rNode = NULL;

cout << \"Data added to the Right successfully\" << endl;

return;

}

}

  

//Remove data from BTS

void myBTS:: rem(string sData)

{

myNode *myParent, *myLocation;

if (roNode == NULL)

{

cout << \"Empty BTS\" << endl;

return;

}

seek (sData, &myParent, &myLocation);

if (myLocation == NULL)

{

cout << \"Data not in BTS\" << endl;

return;

}

if (myLocation -> lNode == NULL && myLocation -> rNode == NULL)

caseOne (myParent, myLocation);

if (myLocation -> lNode != NULL && myLocation -> rNode == NULL)

caseTwo (myParent, myLocation);

if (myLocation -> lNode == NULL && myLocation -> rNode != NULL)

caseTwo (myParent, myLocation);

if (myLocation -> lNode != NULL && myLocation -> rNode != NULL)

caseTwo (myParent, myLocation);

free(myLocation);

}

// Case One

void myBTS:: caseOne (myNode *myPar, myNode *myLoc)

{

if (myPar == NULL)

{

roNode = NULL;

}

else

{

if (myLoc == myPar -> lNode)

myPar -> lNode = NULL;

else

myPar -> rNode = NULL;

}

}

// Case Two

void myBTS:: caseTwo (myNode *myPar, myNode *myLoc)

{

myNode *child;

if (myLoc -> lNode != NULL)

child = myLoc -> lNode;

else

child = myLoc -> rNode;

if (myPar == NULL)

{

roNode = child;

}

else

{

if (myLoc == myPar -> lNode)

myPar -> lNode = child;

else

myPar -> rNode = child;

}

}

// Case Three

void myBTS:: caseThree (myNode *myPar, myNode *myLoc)

{

myNode *ptr1, *ptr2, *successor, *parsuccessor;

ptr2 = myLoc;

ptr1 = myLoc -> rNode;

while (ptr1 -> lNode != NULL)

{

ptr2 = ptr1;

ptr1 = ptr1 -> lNode;

}

successor = ptr1;

parsuccessor = ptr2;

if (successor -> lNode == NULL && successor -> rNode == NULL)

caseOne(parsuccessor, successor);

else

caseTwo(parsuccessor, successor);

if (myPar == NULL)

{

roNode = successor;

}

else

{

if (myLoc == myPar -> lNode)

myPar -> lNode = successor;

else

myPar -> rNode = successor;

}

successor -> lNode = myLoc -> lNode;

successor -> rNode = myLoc -> rNode;

}

// Display Tree Structure

void myBTS::print(myNode *ptr1, char myLevel)

{

int i;

if (ptr1 != NULL)

{

print (ptr1 -> rNode, myLevel+1);

cout << endl;

if (ptr1 == roNode)

cout << \"Root-->: \";

else

{

for (i = 0; i < myLevel; i++)

cout << \" \";

}

cout << ptr1 -> data;

print (ptr1-> lNode, myLevel+1);

}

}

Solution

Solution:

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;

struct myNode
{
    string data;
    struct myNode *lNode;
    struct myNode *rNode;
} *roNode;

class myBTS
{
public:
    void seek(string, myNode **, myNode **);
    void add(myNode *, string);
    void rem(string);
    void caseOne(myNode *, myNode *);
    void caseTwo(myNode *, myNode *);
    void caseThree(myNode *, myNode *);
    void print(myNode *, char);

    myBTS()
    {
        roNode = NULL;
    }
};

// Main method
int main ()
{
    int myOptions;
    string rData, iData;
    myBTS mybst;
    myNode *tmp;
    while (1)
    {
        cout << \"-----------------------------------------\" << endl;
        cout << \"Welcome to Binary Search Tree Programming\" << endl;
        cout << \"-----------------------------------------\" << endl;
        cout << \"1. Add Data \" << endl;
        cout << \"2. Remove Data \" << endl;
        cout << \"3. Print Data \" << endl;
        cout << \"4. Exit \" << endl;
        cout << \"Enter Option : \";
        cin >> myOptions;
        switch(myOptions)
        {
        case 1:
                tmp = new myNode;
                cout << \"Enter data to add : \";
                cin >> iData;
                mybst.add(roNode, iData);
                break;

            case 2:
                if (roNode == NULL)
                {
                    cout << \"Tree empty!!!\" << endl;
                    continue;
                }
                else
                {
                    cout << \"Enter data to remove: \";
                    cin >> rData;
                    mybst.rem(rData);
                }
                break;

            case 3:
                cout << \"Print Tree:\" << endl;
                mybst.print(roNode,1);
                cout << endl;
                break;

            case 4:
                exit (1);
            default:
                cout << \"Wrong Option!!!\" << endl;
        }
    }
}

// Data in BTS
void myBTS::seek(string sData, myNode **myPar, myNode **myLoc)
{
    myNode *ptr1, *ptr2;
    if (roNode == NULL)
    {
        *myLoc = NULL;
        *myPar = NULL;
        return;
    }
    if (sData == roNode-> data)
    {
        *myLoc = roNode;
        *myPar = NULL;
        return;
    }

    if (sData < roNode-> data)
        ptr1 = roNode->lNode;
    else
        ptr1 = roNode-> rNode;
        ptr2 = roNode;

    while (ptr1 != NULL)
    {
        if (sData == ptr1->data)
        {
            *myLoc = ptr1;
            *myPar = ptr2;
            return;
        }
        ptr2 = ptr1;
        if (sData < ptr1 -> data)
            ptr1 = ptr1 ->lNode;
        else
            ptr1 = ptr1 -> rNode;
    }
    *myLoc = NULL;
    *myPar = ptr2;
}
// Add Data into BTS
void myBTS::add(myNode *myTree, string myNewNode)
{
     myNode *myParent, *myLocation;
     seek (myNewNode, &myParent, &myLocation);
    if (roNode == NULL)
    {
        roNode = new myNode;
        roNode -> data = myNewNode;
        roNode -> lNode = NULL;
        roNode -> rNode = NULL;
        cout << \"Root data is added successfully\" << endl;
        return;
    }
    if (myTree -> data == myNewNode)
    {
        cout << \"Data already in BTS\" << endl;
        return;
    }
    if (myTree -> data > myNewNode)
    {
        if (myTree ->lNode != NULL)
       {
           add (myTree -> lNode, myNewNode);
       }
       else
       {
           myTree -> lNode = myParent;
           (myTree -> lNode) -> lNode = NULL;
           (myTree -> lNode) -> rNode = NULL;
           cout << \"Data added to the Left successfully\" << endl;
           return;
       }
   }
    if (myTree -> rNode != NULL)
    {
        add(myTree -> rNode, myNewNode);
    }

   else
   {
       myTree -> rNode = myParent;
       (myTree -> rNode) -> lNode = NULL;
       (myTree -> rNode) -> rNode = NULL;
       cout << \"Data added to the Right successfully\" << endl;
       return;
   }
}

//Remove data from BTS

void myBTS:: rem(string sData)
{

   myNode *myParent, *myLocation;
   if (roNode == NULL)
   {
       cout << \"Empty BTS\" << endl;
       return;
   }
   seek (sData, &myParent, &myLocation);
   if (myLocation == NULL)
   {
       cout << \"Data not in BTS\" << endl;
       return;
   }
   if (myLocation -> lNode == NULL && myLocation -> rNode == NULL)
       caseOne (myParent, myLocation);
   if (myLocation -> lNode != NULL && myLocation -> rNode == NULL)
       caseTwo (myParent, myLocation);
   if (myLocation -> lNode == NULL && myLocation -> rNode != NULL)
       caseTwo (myParent, myLocation);
   if (myLocation -> lNode != NULL && myLocation -> rNode != NULL)
       caseTwo (myParent, myLocation);
   free(myLocation);
}

// Case One

void myBTS:: caseOne (myNode *myPar, myNode *myLoc)
{
   if (myPar == NULL)
   {
       roNode = NULL;
   }
   else
   {
       if (myLoc == myPar -> lNode)
           myPar -> lNode = NULL;
       else
           myPar -> rNode = NULL;
   }
}

// Case Two
void myBTS:: caseTwo (myNode *myPar, myNode *myLoc)
{
   myNode *child;
   if (myLoc -> lNode != NULL)
       child = myLoc -> lNode;
   else
       child = myLoc -> rNode;
   if (myPar == NULL)
   {
       roNode = child;
   }
   else
   {
       if (myLoc == myPar -> lNode)
           myPar -> lNode = child;
       else
           myPar -> rNode = child;
   }
}

// Case Three
void myBTS:: caseThree (myNode *myPar, myNode *myLoc)
{
   myNode *ptr1, *ptr2, *successor, *parsuccessor;
   ptr2 = myLoc;
   ptr1 = myLoc -> rNode;
   while (ptr1 -> lNode != NULL)
   {
       ptr2 = ptr1;
       ptr1 = ptr1 -> lNode;
   }

   successor = ptr1;
   parsuccessor = ptr2;
   if (successor -> lNode == NULL && successor -> rNode == NULL)
       caseOne(parsuccessor, successor);
   else
       caseTwo(parsuccessor, successor);
   if (myPar == NULL)
   {
       roNode = successor;
   }
   else
   {
       if (myLoc == myPar -> lNode)
           myPar -> lNode = successor;
       else
           myPar -> rNode = successor;
   }
   successor -> lNode = myLoc -> lNode;
   successor -> rNode = myLoc -> rNode;
}

// Display Tree Structure
void myBTS::print(myNode *ptr1, char myLevel)
{
   int i;
   if (ptr1 != NULL)
   {
       print (ptr1 -> rNode, myLevel+1);
       cout << endl;
       if (ptr1 == roNode)
           cout << \"Root-->: \";
       else
       {
           for (i = 0; i < myLevel; i++)
           cout << \"          \";
       }
       cout << ptr1 -> data;
       print (ptr1-> lNode, myLevel+1);
   }
}

Result:

-----------------------------------------
Welcome to Binary Search Tree Programming
-----------------------------------------
1. Add Data
2. Remove Data
3. Print Data
4. Exit
Enter Option : 1
Enter data to add : ax
Root data is added successfully
-----------------------------------------
Welcome to Binary Search Tree Programming
-----------------------------------------
1. Add Data
2. Remove Data
3. Print Data
4. Exit
Enter Option : 1
Enter data to add : er
Data added to the Right successfully
-----------------------------------------
Welcome to Binary Search Tree Programming
-----------------------------------------
1. Add Data
2. Remove Data
3. Print Data
4. Exit
Enter Option : 1
Enter data to add : cx
Data added to the Right successfully

I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha
I have a Programming is Binary Tree Search (BTS) for strings with pointers, but I do not know how to change BTS for strings using arrays. Can you help me to cha

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site