二进制搜索树未添加到根目录的右侧

时间:2019-03-22 14:08:31

标签: c++ templates binary-search-tree

我正在编写模板化的二进制搜索树类,用于创建二进制搜索树的函数如下:

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以奇怪字符开头的方式获取文件的第一行,即使不存在也是如此。这些字符总是比其他普通字母具有更大的价值,因此它总是在树的左侧。

0 个答案:

没有答案