我正在編碼打印出BST預訂和後續遍歷。打印BST遍歷錯誤 - 分割錯誤
的分類定義這樣
class BinSearchTree{
char symbol;
BinSearchTree *lChild;
BinSearchTree *rChild;
public:
BinSearchTree(char letter) { symbol = letter;lChild = NULL; rChild = NULL;}
BinSearchTree() { symbol = '0';}
BinSearchTree* buildTree(BinSearchTree *tree, char letter);
void printTreePreOrder (BinSearchTree *temp, std::ofstream &fp1);
void printTreeInOrder (BinSearchTree *temp, std::ofstream &fp1);
};
我用一個簡單的遞歸創建BST
BinSearchTree* BinSearchTree::buildTree(BinSearchTree *tree, char letter){
if (tree == NULL) {
tree = new BinSearchTree (letter);
return tree;
}
else {
if (letter<(tree->symbol))
{
tree->lChild = (BinSearchTree*) buildTree(tree->lChild, letter);
return tree;
}
else{
tree->rChild = (BinSearchTree*) buildTree(tree->rChild, letter);
return tree;
}
}
return tree;
}
但是,當我打印出來的穿越,我得到段故障。我使用這段代碼序和後序
void BinSearchTree::printTreePreOrder (BinSearchTree *temp, std::ofstream &fp1) {
if (temp == NULL){
return;
}
else{
fp1 << symbol << " ";
printTreePreOrder(lChild, fp1);
printTreePreOrder(rChild, fp1);
}
}
類似的東西在我的主要代碼,我創建一個使用
T = new BinSearchTree(str[0]);
for(i=1; i<num; i++){
fp >> str[i];
T->buildTree(T,str[i]);
}
,做遍歷使用
T->printTreePreOrder(T,fp1)
我有我的樹自從幾天以來一直試圖找出錯誤,我認爲這是一個愚蠢的錯誤。任何幫助表示讚賞。
PS - 使用Ubuntu 14.04並使用G ++編譯器。
謝謝,這解決了我得到段錯誤的問題,但輸出仍然是錯誤的。在創建樹的方式中是否存在錯誤?我使用了第二種方法,您提出的函數不在類中。 – user3706865 2014-09-25 12:43:42
已更新的答案,請參閱新的建議。 – NetVipeC 2014-09-25 13:08:09