我写了这个 BST 来计算给定文件中每个单词的数量。该文件的每一行都有重复的单词。
/*all necessary headers*/
class tree
{
public:
tree(string _word) : left( NULL ), right ( NULL ), m_word(_word), count(1) {}
tree* createTree(tree *newNode, string _word)
{
if( newNode == NULL )
newNode = new tree(_word);
else if( _word == newNode->m_word)
newNode->count++;
else if( _word < m_word)
newNode->left = createTree(newNode->left,_word);
else
newNode->right = createTree(newNode->right,_word);
return newNode;
}
private:
string m_word;
int count;
tree *left;
tree *right;
};
int main()
{
string csword;
tree *node = NULL;
ifstream str("word.txt");
while( !str.eof())
{
str>>csword;
node = node->createTree(node,csword);
}
}
我的查询是:
1. 在main()
我初始化node
toNULL
时,我使用相同的指针来调用这些trees
方法。程序不应该崩溃吗?因为我要取消引用NULL
指针?
2:当我在g++编译器(gcc 4.6.3)上运行这段代码时,程序在提交createTree()
方法时_word == newNode->m_word
并没有返回。条件中似乎存在无限循环else if ( _word == newNode->m_word )
。
但是在 Visual Studio 2008 上执行相同的代码没有问题,我能够得到正确的答案。
关于查询 1 和 2 的任何想法?