我特別提到的代碼函數是getCount()。還有其他一些功能,我沒有包括在這裏(比如找到這個二叉樹的高度和總節點數),它們工作得很好,結果正確。另一方面getCount()會產生除第一個節點(樹的頂部,第一個節點)之外的分段故障。有任何想法嗎?這個C++代碼爲什麼會產生分段錯誤?
#include <string>
#include <algorithm>
#include <iostream>
class Word {
public:
std::string keyval;
long long count;
Word() {
keyval = "";
count = 0;
}
Word(std::string S) {
keyval = S;
count = 1;
}
};
class WordBST {
public:
Word node;
WordBST* left_child;
WordBST* right_child;
WordBST(std::string key);
void add(std::string key){
if (key == node.keyval){
node.count++;
}
else if (key < node.keyval){
if (left_child == NULL){
left_child = new WordBST(key);
}else {
left_child->add(key);
}
}else {
if (right_child == NULL){
right_child = new WordBST(key);
}else {
right_child->add(key);
}
}
}
long long getCount(std::string key){
if (key == node.keyval){
return (node.count);
}
else if (key < node.keyval){
left_child->getCount(key);
}else if(key > node.keyval){
right_child->getCount(key);
}else return 0;
/*else {
if (key < node.keyval){
left_child->getCount(key);
}else{
right_child->getCount(key);
}
}*/
}
};
WordBST::WordBST(std::string key) {
node = Word(key);
left_child = NULL;
right_child = NULL;
}
您是否嘗試過使用調試器? – 2012-07-22 00:58:49
當您第一次解除引用時,是否有'left_child'和'right_child'有效指針? – Aesthete 2012-07-22 00:59:19