Так что мой код ниже. Я не получаю никаких ошибок, и он помещает все в узле просто отлично. Но на основе моих отладочных инструкций Каждый раз, когда что-то вставлено, он находит корень. Я не уверен, правильно ли это. Но согласно выходному файлу для назначения, мои ответы различны, когда дело доходит до высоты дерева, обходов, и я просто плоский, все еще испытываю проблемы со своей функцией подсчета листьев. Еще одна история.Вставка двоичного дерева C++ с помощью рекурсии
Основываясь на заявлениях отладки, похоже, что все идет правильно там, где они должны. Но я полагаю, что мне могут понадобиться свежие глаза. Я не вижу, как мои обходы могут измениться вообще, потому что это действительно только вопрос, где я обрабатываю узел, который должен воздействовать на Inorder, preorder и postorder.
template <class T>
void BT<T>::insert(const T& item)
{
Node<T>* newNode;
newNode = new Node<T>(item);
insert(root, newNode);
}
template <class T>
void BT<T>::insert(struct Node<T> *&root, struct Node<T> *newNode)
{
if (root == NULL)
{
cout << "Root Found" << newNode->data << endl;
root = newNode;
}
else
{
if (newNode->data < root->data)
{
insert(root->left, newNode);
cout << "Inserting Left" << newNode-> data << endl;
}
else
{
insert(root->right, newNode);
cout << "Inserting Right" << newNode->data << endl;
}
}
}
Моя функция высоты следующая на всякий случай моя вставка на самом деле хорошо.
template <class T>
int BT<T>::height() const
{
return height(root);
}
template <class T>
int BT<T>::height(Node<T>* root) const
{
if (root == NULL)
return 0;
else
{
if (height(root->right) > height(root->left))
return 1 + height(root-> right);
return 1 + height(root->left);
}
}
так что вы думаете, моя вставка является правильной? Я имею в виду, основываясь на моих отладочных отпечатках ... и физически записывая это ... все, кажется, соответствует. – Doug 2008-10-16 05:22:19
Да, ваш рост дал мне то же значение, что и мое. Он выглядит более чистым и более эффективным, хотя я его ценю. – Doug 2008-10-16 05:24:41
Небольшая коррекция, если (root = NULL) должна быть root == NULL. – syaz 2008-12-06 21:22:00