Я пытаюсь реализовать двоичное дерево.Моя программа резко останавливается после нескольких вставок узлов.Что не так? - PullRequest
0 голосов
/ 09 мая 2019

Я просто пробую реализацию бинарного дерева.Это не для колледжа, поэтому я не могу спросить учителя: (

Я пытался отладить его с помощью отладчика Codeblocks, но я все еще не понимаю, что происходит не так.

Я используюкласс вместо структуры. В настоящее время я реализовал только функции вставки и обхода inorder. Для функции вставки я проверяю, является ли корневой узел NULL или нет. Если это NULL, newNode становится равным корневому узлу. Или же янайдите соответствующий родительский узел и затем добавьте newNode в качестве его потомка.

И в функции обхода inorder моя рекурсия верна?

Редактировать: Оказывается, я не инициализировал свойПеременные узла. Мой код работает после инициализации этих переменных. Спасибо за вашу помощь!

#include<iostream>
using namespace std;

class Node
{
public:
    int data;
    Node* left_child;
    Node* right_child;
};

Node* root = NULL;
void insertion();
void inorder_travesal(Node*);

int main(){
    char ch;
    do{ 
        int choice;
        cout<<"\nEnter your choice: \n1. Insertion\n2. Inorder Traversal\n : ";
        cin>>choice;

        switch(choice){
            case 1: insertion();
                    break;

            case 2: inorder_travesal(root);
                    break;
        }

        cout<<"\nDo you want to continue?: ";
        cin>>ch;

    }while(ch == 'y');


    return 0;
}

void insertion(){
    int data;
    cout<<"\nEnter data: ";
    cin>>data;

    Node* newNode = new Node;
    newNode->data = data;

    if(root == NULL)
    {
        root = newNode;
        return;
    }
    else
    {
        Node* temp = root;

        while(true){

            if(temp->data > newNode->data)
            {
                if(temp->left_child == NULL)
                {
                    temp->left_child = newNode;
                    return;
                }
                else
                {
                    temp = temp->left_child;
                }
            }
            else
            {
                if(temp->right_child == NULL)
                {
                    temp->right_child = newNode;
                    return;
                }
                else
                {
                    temp = temp->right_child;
                }
            }
        }
    }
    inorder_travesal(root);
}

void inorder_travesal(Node* temp){

    if(temp->left_child != NULL){
        inorder_travesal(temp->left_child);
    }

    cout<<temp->data<<" ";

    if(temp->right_child != NULL){
        inorder_travesal(temp->right_child);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...