一些C++程序员说动态内存分配不好,应尽可能避免。我试图做一个二叉树数据结构,而不使用动态内存分配,它不起作用。下面是我的尝试:如何在不使用动态内存分配的情况下创建基于指针的二叉树?
struct BTNode {
BTNode *left = 0, *right = 0;
int data;
BTNode(int d_) { data = d_; }
void insert(int d_) {
BTNode n(d_);
if (d_ <= data)
if (left == 0) left = &n;
else left->insert(d_);
else
if (right == 0) right = &n;
else right->insert(d_);
}
}
然后在主做这个...
BTNode root(8);
root.insert(9);
root.insert(10);
cout << root.right->right->data;
导致段错误,因为包含数据的BTNode很久以前出去的范围。
我的问题是,如何构建一个基于指针的二叉树,而不使用new
和delete
?
使用值而不是指针 – user4759923
您可以创建一个包含足够元素的BTNode数组,并将其用作内存池,从数组中获取节点。 – MikeCAT
你可以创建一个'std :: vector'来容纳所有的节点。我个人认为这不是必要的。我会简单地执行'auto newNode = new BTNode(8);'然后设置适当的指针。 –