Ошибки реализации бинарного дерева поиска - PullRequest
0 голосов
/ 12 ноября 2018
struct Tree{
    int Data;
    Tree* Left;
    Tree* Right;

    Tree(){
        Data = 0;
        Left = NULL;
        Right = NULL;
    }
};

Tree* Temp;
Tree* Root;

void Add(Tree* Dummy){
    if(Dummy == NULL)
        Dummy = Temp;
    else if(Dummy -> Data <= Temp -> Data)
        Add(Dummy -> Left);
    else
        Add(Dummy -> Right);
    cout << endl << Dummy -> Data;
}

void Create(){
    Temp = new Tree;
    cin >> Temp -> Data;
    Temp -> Left = NULL;
    Temp -> Right = NULL;
    if(Root == NULL)
        Root = Temp;
    else
        Add(Root);
}
void Display(Tree* Dis){
    cout << endl << Root -> Data;
    cout << endl << Root -> Left -> Data;
    cout << endl << Root -> Right -> Data;
}

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

1 Ответ

0 голосов
/ 13 ноября 2018

Я не уверен, в чем ваша проблема, но могу проверить это на примере бинарного дерева поиска:

#include <iostream>

using namespace std;

struct Tree{
    int Data;
    Tree* Left;
    Tree* Right;

    Tree(int data){
        Data = data;
        Left = NULL;
        Right = NULL;
    }
};

Tree* Root;

int Add(Tree* node, Tree* root){ // return int so we can know it successful 
    if(node == NULL || node->Data == root->Data)
        return 0;
    if(node->Data <= root->Data) {
        if (root->Left)
            Add(node, root->Left);
        else 
            root->Left = node;
    }
    else {
        if (root->Right)
            Add(node, root->Right);
        else 
            root->Right = node;
    }
    return 1;
}

int Create(int data){ // return int so we can know it successful
    if (Root != NULL)
        return 0;
    Root = new Tree(data);
    return 1;
}
void DisplayInOrder(Tree* node){
    if (node == NULL)
        return;
    DisplayInOrder(node->Left);
    cout << node->Data << endl;
    DisplayInOrder(node->Right);
}

int main()
{
    Create(5);
    for (int i = 0; i < 4; i++) {
        Tree * t = new Tree(i);
        Add(t, Root);
    }
    DisplayInOrder(Root);
    return 0;
}

Я не C++ эксперт, поэтому извините, если у меня были ошибки ...

...