Двунаправленное дерево двоичного поиска - сохранение родительских и родительских узлов для настройки потоков - PullRequest
1 голос
/ 29 сентября 2019

Для школьного задания мне нужно взять двоичное дерево поиска и преобразовать его в двухпоточное дерево двоичного поиска.У меня есть общее представление о том, как работают потоки, но я понимаю, что для того, чтобы узнать, где именно находятся потоки, мне нужно знать родителя последнего вставленного узла (prev), а также родителя этого узла какхорошо (два назад).Однако в моих попытках изменить одну из функций, чтобы сохранить эти значения, я не могу получить то, что ищу.

Если кто-то может точно указать, что я делаю неправильно, и объяснитьэто для меня, чтобы я мог учиться на своих ошибках, я был бы очень признателен.Спасибо!

Обе эти функции являются частью класса для самого BST:

void insert(const Key& k, const E& e) 
{
    root = inserthelp(root, k, e);
    nodecount++;
}
BSTNode<Key, E>* BST<Key, E>::inserthelp(BSTNode<Key, E>* root, const Key& k, const E& it) 
{
    if (root == NULL)  // Empty tree: create node
    {
        return new BSTNode<Key, E>(k, it, NULL, NULL);
    }
    if (k < root->key())
    {
        if (prev != NULL)
            twoBack = prev;
        prev = root;
        root->setLeft(inserthelp(root->left(), k, it));
    }
    else
    {
        if (prev != NULL)
            twoBack = prev;
        prev = root;            
        root->setRight(inserthelp(root->right(), k, it));
    }
    return root;       // Return tree with node inserted
}
...