我正在编写模板化的二进制搜索树类,用于创建二进制搜索树的函数如下:
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以奇怪字符开头的方式获取文件的第一行,即使不存在也是如此。这些字符总是比其他普通字母具有更大的价值,因此它总是在树的左侧。