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);
}