C++ 如何将二叉树的所有节点推送到堆栈中,然后打印堆栈内容?
这是我尝试做同样的事情,但是我得到了一个“坏的”错误C++ 如何将二叉树的所有节点推送到堆栈中,然后打印堆栈内容?,c++,stl,stack,binary-tree,C++,Stl,Stack,Binary Tree,这是我尝试做同样的事情,但是我得到了一个“坏的”错误 stackst; void func(节点*根){ if(root==NULL){ 返回; } while(root!=NULL) { func(根->左); st.push(根->数据); func(根->右); } //打印堆栈数据 而(!st.empty()) { cout您同时使用while循环和递归,但不需要循环。您可以使用顺序/后序/前序遍历并将元素推入堆栈。以下是我的实现: void inorder(Node* root){
stackst;
void func(节点*根){
if(root==NULL){
返回;
}
while(root!=NULL)
{
func(根->左);
st.push(根->数据);
func(根->右);
}
//打印堆栈数据
而(!st.empty())
{
cout您同时使用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
将永远不会为null。如果(root!=null),您可以将其更改为if(root!=null)
以实现您的目标,但也不需要进行该检查,因为NULL
检查在此之前已完成。您可以向我解释第一个while循环吗?我看不出root何时会设置为NULL。这实际上是错误的。请参阅其他正确方法的答案。
while(root!=NULL)
{
func(root->left);
st.push(root->data);
func(root->right);
}