Итак, я создал двоичное дерево поиска, которое хранится в массиве. Это двоичное дерево поиска (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;
}
}
Заранее спасибо!