C ++ Печать всех значений в двоичном дереве - PullRequest
0 голосов
/ 03 мая 2018

Итак, я создал двоичное дерево поиска, которое хранится в массиве. Это двоичное дерево поиска (BST) хранит введенный пользователем идентификатор, возраст и имя, а затем помещает его в массив, отсортированный по возрастанию по идентификатору.

Я пытаюсь написать отчет о функции, который проходит через массив, печатая ID каждого узла, возраст, имя и уровень, на котором они были бы, если бы они были представлены в виде двоичного дерева.

Например, если бы у меня были эти конкретные узлы

101 10 Боб

102 11 Стив

104 14 Walt

103 12 Lan

105 14 Билл

Это принесло бы им как 101 10 Боб 0, 1

02 11 Стив 1, 1

03 12 Lan 1,

104 13 Walt 2,

105 14 Билл 2,

Однако по какой-то причине при попытке напечатать этот конкретный пример с использованием моей функции отчета я получаю странные отрицательные числа и большое количество дополнительных узлов, которые ранее не были вставлены.

Есть что-то, что я делаю не так?

EDIT: я больше не инициализирую размер массива BST равным 30, однако теперь отчет больше не печатает ничего. Я новичок, поэтому мое понимание C ++ довольно минимально.

Вот мой код.

#include "BinaryTree.h"
#include <string>
#include <iostream>
#include <vector>

using namespace std;

int count = 0;

struct Node
{
    int ID;
    int age;
    string name;

    Node()
    {

    }

    Node(int id, int Age, string nm)
    {
        this->ID = id;
        this->age = Age;
        this->name = nm;
    }
};

vector<Node> binaryTree;


BST::BST()
{

}



void BST::start()
{
    int choice;


    cout << "What would you like to do?" << endl;
    cout << "1. Add a node to the tree" << endl;
    cout << "2. Delete a node from the tree" << endl;
    cout << "3. Find a node in the tree" << endl;
    cout << "4. Report the contents of the tree" << endl;
    cout << "5. Exit program" << endl;

    cin >> choice;

    if (choice == 1)
    {
        insert();
    }

    if (choice == 3)
    {
        find();
    }

    if (choice == 4)
    {
        report();
    }


}

void BST::insert()
{

    int ID;
    int AGE;
    string NAME;
    cout << "Please enter the ID number, age and name" << endl;
    cin >> ID >> AGE >> NAME;

    Node *tree = new Node(ID, AGE, NAME);

    if (count == 0)
    {
        binaryTree.push_back(*tree);
        count++;
    }

    if (count > 0)
    {
        if ((binaryTree.at(count - 1).ID) < ID)
        {
            binaryTree.push_back(*tree);
            count++;
        }
    }


    if (count > 0)
    {
        if ((binaryTree.at(count - 1).ID) > ID)
        {
            Node *temp = new Node();
            *temp = binaryTree.at(count - 1);
            binaryTree.at(count - 1) = *tree;

            binaryTree.at(count) = *temp;
            count++;
        }
    }
    cout << "Added! Size: " << binaryTree.size() << endl;

    start();


}


void BST::Delete()
{

}


void BST::find()
{
    int key;
    bool found = 0;

    cout << "What's the ID?" << endl;
    cout << " " << endl;

    cin >> key;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        if (binaryTree.at(i).ID == key)
        {
            cout << "The ID is " << binaryTree.at(i).ID << endl;
            cout << "The age ID " << binaryTree.at(i).age << endl;
            cout << "The name is " <<binaryTree.at(i).name << endl;
            cout << " " << endl;

            found = true;

        }
        if (found == false)
        {
            cout << "Not found." << endl;
            cout << "" << endl;
            break;
        }
    }
    start();
}


void BST::report()
{
    cout << "The contents of the tree are" << endl;
    cout << " " << endl;

    for (unsigned int i = 0; i < binaryTree.size(); i++)
    {
        int level = 0;
        if (i == 0) level = 0;
        if (i == 2 || i == 3) level = 1;
        if (i >= 4 && i <= 7) level = 2;
        if (i >= 8 && i <= 15) level = 3;
        cout << binaryTree.at(i).ID << " " << binaryTree.at(i).age << " " << binaryTree.at(i).name << " " << level << endl;

    }
}

Заранее спасибо!

1 Ответ

0 голосов
/ 03 мая 2018

С этим кодом очень много проблем.

int count был инициализирован в заголовке. Удалил это и инициализировал в .cpp, чтобы получить ошибку "count is ambiguous".

Это в первую очередь связано с

using namespace std;

Так как count - это элемент в этом пространстве имен.

...