2016-09-07 62 views
1

我创建了一个二叉搜索树,其中我一直在线上学习一个教程(https://www.youtube.com/watch?v=z0FDBGbf42Q:PaulProgramming)。我的代码与本教程中的代码几乎相同,但是当我运行main时,出现了分段错误。我无法弄清楚为什么。如果有人能够指出我的错误将会非常感激。是的,对于使用命名空间std抱歉,在我运行后我会适当地改变一切。BST中的段错误C++

BST.h

#ifndef BST_H 
#define BST_H 

class BST{ 
private: 
    struct node 
    { 
     int data; 
     node* left; 
     node* right; 
    }; 

    node* root; 

    void addLeafPrivate(int Data, node* ptr); 
    void printInOrderPrivate(node* ptr); 

public: 
    BST(); 
    node* createLeaf(int Data); 
    void addLeaf(int Data); 
    void printInOrder(); 

}; 
#endif 

BST.cpp

#include <iostream> 
#include <cstdlib> 
#include "BST.h" 

using namespace std; 

BST::BST(){ 
    root = NULL; 
} 



BST::node* BST::createLeaf(int Data){ 
    node* leaf = new node; 
    leaf->data = Data; 
    leaf->left = NULL; 
    leaf->right = NULL; 

    return leaf; 
} 

void BST::addLeafPrivate(int Data, node* ptr){ 
    if(root = NULL) 
     root = createLeaf(Data); 

    else if(Data < ptr->data){ 
     if(ptr->left != NULL) 
      addLeafPrivate(Data, ptr->left); 
     else 
      ptr->left= createLeaf(Data); 
    } 

    else if(Data > ptr->data){ 
     if(ptr->right != NULL) 
      addLeafPrivate(Data, ptr->right); 
     else 
      ptr->right= createLeaf(Data); 
    } 

    else 
     cout<< "The key " << Data << "already exist in the Binary Search Tree" << endl; 
} 

void BST::printInOrderPrivate(node* ptr){ 
    if(root != NULL){ 
     cout<< ptr->data << " " <<endl; 
     if(ptr->left != NULL) 
      printInOrderPrivate(ptr->left); 
     if(ptr->right != NULL) 
      printInOrderPrivate(ptr->right); 
    } 
    else 
     cout<<"Binary Search Tree is empty " << endl; 
} 

void BST::addLeaf(int Data){ 
    addLeafPrivate(Data, root); 
} 

void BST::printInOrder(){ 
    printInOrderPrivate(root); 
} 

主要

#include <iostream> 
#include <cstdlib> 
#include "BST.cpp" 

int main(){ 
    BST tree; 
    tree.addLeaf(2); 
    tree.addLeaf(5); 
    tree.addLeaf(10); 
    tree.addLeaf(0); 

    tree.printInOrder(); 

    return 0; 
} 
+1

你的'bst.h'和'main.cpp'文件是相同的。我认为这是一个错字,在这种情况下,您应该向我们展示* real *'bst.h'。 – paxdiablo

+1

你为什么在你的main.cpp中包含bst.cpp,是否是错字? – HazemGomaa

+0

哎呀我的错误,让我编辑 –

回答

3

在addLeafPrivate怎么做,如果(根= NULL)而不是如果(根== NULL )

+1

我知道这会是这样的!我只需要另一只眼睛。非常感谢。什么菜鸟的错误。 –

+0

我会在6分钟内接受你的回答 –

+0

我已经接受你的回答,我为浪费时间而道歉。但你非常帮助我。如果它不是用于stackoverflow社区的话,我一直在寻找更多小时的bug。 –