我很困惑指针如何在这里工作。我在这个类中有一个名为PrefixTree
的类和一个名为TreeNode
的结构。我有下面的代码来构建一个带有字符串的树,问题是每次调用preorder()
它都不会正确地返回根字符,然后它会抛出一个分段错误。指针混淆
我想知道我是否正确设置了root
指针,或者如果我在其他文件中滥用了它。
//prefixtree.cpp
PrefixTree::TreeNode* PrefixTree::buildTree(string& input)
{
char c = input[0];
input.erase(0,1);
TreeNode* node = new TreeNode();
node->character = c;
if (!root)
root = node;
if (c == '*')
{
node->left = buildTree(input);
node->right = buildTree(input);
}
return node;
}
void PrefixTree::preorder()
{
traverse(root);
}
void PrefixTree::traverse(TreeNode* node)
{
if (node)
{
cout << node->character << endl;
traverse(node->left);
traverse(node->right);
}
}
和
//prefixtree.h
class PrefixTree
{
private:
struct TreeNode
{
char character;
TreeNode* left;
TreeNode* right;
};
TreeNode* root;
void traverse(TreeNode* node);
public:
TreeNode* buildTree(string& input);
void preorder();
};
和
//main.cpp
PrefixTree tree;
string a = string("*a**!*dc*rb");
cout << tree.buildTree(a)->character << endl;
tree.preorder();
一眼看起来不错。 – John3136
如果您认为预订有bug,请提供代码 – Leeor
我刚刚提供了整个代码 –