如何解决如何将二叉树的所有节点推入堆栈,然后打印堆栈内容?
这是我尝试执行的操作,但出现“ 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
检查是在此之前完成的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。