问题描述
这是我尝试执行的操作,但出现“ bad_alloc”错误。
stack<int>st;
void func(Node * root){
if(root==NULL){
return;
}
while(root!=NULL)
{
func(root->left);
st.push(root->data);
func(root->right);
}
//Printing stack data
while (!st.empty())
{
cout << '\t' << st.top();
st.pop();
}
cout << '\n';
return 0;
}
根节点作为func()中的参数传递。
解决方法
尽管不需要循环,但您同时使用while循环和递归。您可以使用顺序/后顺序/预遍历遍历并将元素推入堆栈。这是我的实现:
void inorder(Node* root){
if(root == NULL)
return;
inorder(root->left); // Call for left subtree
st.push(root->data); // Push the element to the stack
inorder(root->right); // Call for right subtree
}
然后只需打印堆栈。
,while(root!=NULL)
{
func(root->left);
st.push(root->data);
func(root->right);
}
这使程序进入无限循环。 root
永远不会为空。您可以将其更改为if(root!=NULL)
以实现您想要的目的,但是也不需要进行该检查,因为NULL
检查是在此之前完成的。