我正在尝试实现一个二叉树。插入几个节点后,我的程序突然停止。怎么了?

时间:2019-05-09 05:54:25

标签: c++ binary-tree

我正在尝试实施二叉树。这不是上大学课,所以我不能问老师:(

我曾尝试使用Codeblocks调试器对其进行调试,但我仍然不了解出了什么问题。

我正在使用类而不是struct。目前,我仅实现了插入和有序遍历功能。 对于插入功能,我正在检查根节点是否为NULL。如果为NULL,则newNode等于根节点。否则,我找到合适的父节点,然后将newNode附加为其子节点。

在顺序遍历函数中,我的递归是否正确?

编辑:原来我没有初始化Node变量。初始化这些变量后,我的代码正在工作。感谢您的帮助!

#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);
    }
}

0 个答案:

没有答案