Недавно я начал играть с C++, а именно с классами и указателями. Я искал похожие вопросы, но ничего не помогло.C++ двоичное дерево поиска
У меня есть двоичный класс дерева поиска, который содержит некоторую информацию в строковом формате (ну, char *), но после добавления нового узла в дерево я не могу получить информацию обратно, так как она возвращает мусор.
Вот что мой код выглядит следующим образом:
class Node
{
Node *lNode;
Node *rNode;
char *name;
public:
void setName(char *n) { name = n; }
char *getName() { return name; }
}
class Tree
{
Node *root;
Node *addNode(Node *, Node *);
public:
Tree() { root = NULL };
int addNewNode(Node *);
void print();
};
int Tree::addNewNode(Node *n)
{
root = addNode(root, n);
cout << root->getName() << endl; // this returns the name correctly
}
Node *Tree::addNode(Node *subtree, Node *node)
{
if(subtree== NULL)
{
subtree = node;
}
else if(node->getName() <= subtree->getLeft())
{
subtree->setLeft(addNode(subtree->getLeft(), node));
}
else
{
subtree->setRight(addNode(subtree->getRight(), node));
}
return subtree;
}
void Tree::print()
{
cout << root->getName() << endl; // this does not!
}
И это, где я называю методы:
Tree *myTree = new Tree();
Node *n = new Node();
n->setName(name);
myTree->addNewNode(n);
Переменная дерево является частным атрибут членом внешнего класса контейнера, и фактически создается вне этого класса, который должен быть передан в конструктор. Когда я вызываю метод addNewNode, который добавляет узел в дерево, но когда я хочу распечатать имя узла, хранящегося в корне, он просто появляется с барахлом. Наверное, где-то есть указатель haywire, но я не могу найти его для жизни.
Любая помощь была бы принята с благодарностью.
Почему вы не используете 'std :: map' или' std :: set'? –
Не указывайте свой параметр с тем же именем, что и ваш член. Вы сделаете ошибку, сделав это так ... –
Это было глупо со мной. Изменено это на «поддерево», но все равно. – straphe