我正在尝试实现自定义树结构,但我得到一个奇怪的输出。
enum letter{B,A,T,G,C,N};
struct Node {
int ltr;
Node* ptr;
};
class GTree
{
public:
GTree(int);
void insert(int);
private:
Node* root;
void insert(int l,Node* leaf);
};
GTree::GTree(int l)
{
root->ltr=l;
}
void GTree::insert(int l, Node *leaf)
{
cout<<leaf->ltr;
}
void GTree::insert(int l)
{
if(root==NULL)
{
insert(l, root);
}
else
{
root= new Node;
insert(l,root);
}
}
int main()
{
GTree tree=GTree(T);
tree.insert(T);
}
输出结果为-2062064467,尽管我期待着2.什么东西在这里?我正在研究一个简单的BTree实现,但是打算将它重新用于我想要的数据结构。
答案 0 :(得分:6)
首次创建GTree对象时,您没有创建Node对象。
GTree::GTree(int l)
{
root->ltr=l;
}
应该是
GTree::GTree(int l)
{
root = new Node();
root->ltr=l;
}
另外,请确保您有一个destuctor来清理资源。
我觉得应该指出的其他事情GTree::insert(int l, Node *leaf)
可能没有达到你的预期。
cout<<leaf->ltr;
上面的代码只输出节点中的整数值,但实际上没有分配它。
但也许你还没有完成那部分。 : - )
答案 1 :(得分:2)
您尚未初始化root,因此root->ltr=l;
会产生未定义的行为。首先添加root = new Node();
。
答案 2 :(得分:0)
我运行你的代码并在Ubuntu 12.04上使用gcc 4.6.3获得输出0。