二进制搜索树插入未排序的数组

时间:2014-05-09 21:48:38

标签: arrays insert binary-search-tree

我在尝试在给定未排序数组的BST上插入元素时遇到问题。输出给我一个分段错误,但我无法确定错误的位置。我很确定我的插页有问题,但我不确定是什么。如果有人能给我一些非常感激的见解。

#include <iostream>

using namespace std;

struct BST{
    BST* left;
    BST* right;
    int data;
};

BST* init(int data){
    BST* a = new BST;
    a->data = data;
    a->right = NULL;
    a->left = NULL;
    return a;
}

BST* insert(BST* root, int data){
    if (root == NULL)
        root = new BST;
    else{
        BST* current = root;
        if (current->data >= data)
            insert(current->right, data);
        else
            insert(current->left, data);
    }
    return 0;
}

void inorderTraversal(BST* root)
{
    cout << "seg fault here" << endl;
    if(root == NULL) 
        cout << "No node" << endl;
    inorderTraversal(root->left);
    cout << root->data << endl;
    inorderTraversal(root->right);
}


int main(){
    BST* tree = init(5);
    int a[8] = {1, 3, 5, 6, 3, 9, 10, 46};
    for (unsigned int i = 0; i < sizeof(a)/sizeof(int); i++)
        insert(tree, a[i]);
    inorderTraversal(tree);
}

1 个答案:

答案 0 :(得分:0)

如果你还在调试,这里有一个提示:

叶子节点的两个子节点都是NULL,您可以通过init()方法正确设置它们。但是,在创建新节点时,使用init()

时不一致

此外,您可能需要在cout方法中逐步执行/ insert() s,以便您可以观看它构建树。