Я пишу шаблонный класс дерева двоичного поиска, функция, которую я использую для создания дерева двоичного поиска, выглядит следующим образом:
void insert(const Comparable & x, BinaryNode<Comparable> * & t)
{
if (t==NULL)
t = new BinaryNode<Comparable>(x, NULL, NULL);
else if (x < t->element)
insert(x, t->left);
else if (x>t->element)
insert(x, t->right);
else
; // Duplicate;
}
и BinaryNode - это другой шаблонный класс, как показано ниже:
template <class Comparable>
class BinaryNode
{
public:
Comparable element;
BinaryNode *left;
BinaryNode *right;
BinaryNode(const Comparable & theElement,
BinaryNode *lt, BinaryNode *rt)
: element(theElement), left(lt), right(rt) { }
};
Проблема в том, что всякий раз, когда я создаю новое дерево, оно добавляет первый элемент в качестве корневого. Тогда, даже если следующий элемент, который я хочу добавить, больше, чем корень, который он добавляет слева от корня. Для элементов слева от дерева эта проблема не возникает, она добавляет ее справа при необходимости. Вы можете помочь?
РЕДАКТИРОВАТЬ: Проблема решена. Я построчно читал файл и сохранял эти строки в узлах. Оказалось, что getline получает первую строку файла так, как будто он начинается со странных символов, хотя их не существует. Эти символы всегда имели большее значение, чем другие нормальные буквы, поэтому они всегда идут слева от дерева.