这是代码库。我无法找出此代码中发生的错误(运行时(。该显示功能显示通用树,并且在主功能中正在实现通用树。
树节点
struct node
{
int data;
vector<node*> children;
node(int data){
this->data = data;
}
};
这是显示功能。
void display(node* n)
{
string str = n->data+"->";
for(node* child:n->children)
{
str+=child->data+",";
}
str+=".";
cout<<str<<endl;
for(node* child:n->children)
{
display(child);
}
}
这是主要的
int main()
{
int arr[] = {10,20,50,-1,60,-1,-1,30,70,-1,80,110,-1,120,-1,-1,90,-1,-1,40,100,-1,-1,-1};
node *root;
stack<node*> st;
for(int i=0 ; i<24 ;i++)
{
if(arr[i]==-1)
{
st.pop();
}
else{
node *t = new node(arr[i]);
if(st.size()>0)
{
st.top()->children.push_back(t);
}
else{
root = t;
}
st.push(t);
delete(t);
}
}
display(root);
return 0;
}
有两个错误:
- 分段错误的原因是
delete(t);
,而节点仍在树和堆栈中被引用,并且稍后需要,这导致使用损坏的内存。只有当树最终被解除分配时,您才必须删除节点 - 您忘记在显示功能中将
->data
转换为string
。string str = to_string(n->data)+"->"; … str += to_string(child->data)+",";