0
我目前正在寫一個二叉搜索樹來保存我想按名稱排列的歌曲列表。我按照慣例遞歸,使用strcmp比較樹的當前節點(歌曲是節點)的標題和要添加的歌曲的標題。該代碼在達到Song的get_title函數時會發生seg錯誤,它僅返回一個char *。我可能在這裏忽略了一些明顯的東西,但我很難過。我試圖解決它沒有結果。也許你可以幫助我。我對二叉搜索樹的代碼如下:二叉搜索在一個陌生的地方樹seg故障
#include "BSTree.h"
BSTree::BSTree() {
next = NULL;
root = NULL;
}
BSTree::BSTree(const BSTree& src) {
next = src.next;
root = src.root;
}
BSTree::~BSTree() {
next = NULL;
root = NULL;
}
void BSTree::add(Song& s) {
root = add_r(root, s);
}
Song* BSTree::add_r(Song* curr, Song& song) {
if(curr = NULL) {
Song* temp = new Song(song);
curr = temp;
cout << "added a new song" << endl;
return curr;
} else if(strcmp(song.get_title(), curr->get_title()) <= 0) {
cout << "went left" << endl;
curr->set_left(add_r(curr->get_left(), song));
} else {
cout << "went right" << endl;
curr->set_right(add_r(curr->get_right(), song));
}
}
作爲一個額外的觀察,並不是所有'add_r'函數中的控制路徑都返回一個值。你*必須*在函數結尾處返回'curr',否則你會損壞你的樹。您可能還想考慮使用不區分大小寫的比較(stricmp),並考慮如果插入的歌曲與樹中已有的歌曲具有相同的名稱,該如何操作。 – paddy