栗子hl 2013-12-28 02:18 采纳率: 66.7%
浏览 2210
已采纳

这个程序是二叉树的先序遍历的非递归算法,请问哪里错了????急求

#include
using namespace std;
//=================================
struct BiTNode
{
char data;
BiTNode *lchild,*rchild;
};
//=====================================
struct SNode
{
BiTNode *Sdata;
SNode *next;
};
SNode *S;
//============================================
void InitStack(SNode *&S)
{
S=new SNode;
S->next=NULL;
}
//===================================
bool EmptyStack(SNode *&S)
{
if(S->next=NULL)
return true;
else
return false;

}
//============================================
void push(SNode *&S,BiTNode *e)
{
SNode *p=new SNode;
p->next=NULL;
p->Sdata=e;
p->next=S->next;
S->next=p;
}
//========================================
void pop(SNode *&S,BiTNode *&e)
{
if(S->next==NULL)
{
cout<<"栈空,结束程序"<<endl;
exit(1);
}

SNode *p=new SNode;
p->next=NULL;
p=S->next;
e=p->Sdata;
S->next=p->next;

// delete p;
}
//=============================================
void Createbt(BiTNode *&T)
{
char c;
cin>>c;
if(c=='#')
{
T=NULL;
return;
}
else
{
T=new BiTNode;
if(!T)
{
cout<<"内存分配出错"< exit(1);//程序结束
}
T->data=c;
Createbt(T->lchild);
Createbt(T->rchild);
}
}
//========================================================
void InorderTraverse(BiTNode *&T)
{
//SNode *S;
InitStack(S);
//BiTNode *p=new BiTNode;
BiTNode *p=T;
while(p||!EmptyStack(S))
{
if(p){
push(S,p);
p=p->lchild;
}
else
{
pop(S,p);
cout<data<<" ";
p=p->rchild;
}
}
}
//=========================================
void InOrder(BiTNode *T)
{
if(T==NULL)
return;
InOrder(T->lchild);
cout<data<<" ";
InOrder(T->rchild);
}
//=======================================================
int main()
{
BiTNode *T;
cout<<"请按照先序序列输入各结点所存储的元素"<<endl;
Createbt(T);
InOrder(T);
cout<<endl;
InorderTraverse(T);
return 1;
}

  • 写回答

1条回答

  • X先生说 2013-12-29 09:09
    关注

    #include
    using namespace std;
    //=================================
    struct BiTNode
    {
    char data;
    BiTNode *lchild,*rchild;
    };
    //=====================================
    struct SNode
    {
    BiTNode *Sdata;
    SNode *next;
    };
    SNode *S;
    //============================================
    void InitStack(SNode *&S)
    {
    S=new SNode;
    S->next=NULL;
    }
    //===================================
    bool EmptyStack(SNode *&S)
    {
    if(S->next=NULL)
    return true;
    else
    return false;

    }
    //============================================
    void push(SNode *&S,BiTNode *e)
    {
    SNode *p=new SNode;
    p->next=NULL;
    p->Sdata=e;
    p->next=S->next;
    S->next=p;
    }
    //========================================
    void pop(SNode *&S,BiTNode *&e)
    {
    if(S->next==NULL)
    {
    cout<<"栈空,结束程序"<<endl;
    exit(1);
    }

    SNode *p=new SNode;
    p->next=NULL;
    p=S->next;
    e=p->Sdata;
    S->next=p->next;
    // delete p;
    }
    //=============================================
    void Createbt(BiTNode *&T)
    {
    char c;
    cin>>c;
    if(c=='#'||c=='0')
    {
    T=NULL;
    return;
    }
    else
    {
    T=new BiTNode;
    if(!T)
    {
    cout<<"内存分配出错"< exit(1);//程序结束
    }
    T->data=c;
    Createbt(T->lchild);
    Createbt(T->rchild);
    }
    }
    //========================================================
    void InorderTraverse(BiTNode *&T)
    {
    //SNode *S;
    InitStack(S);
    //BiTNode *p=new BiTNode;
    BiTNode *p=T;
    while(p||!EmptyStack(S))
    {
    if(p){
    push(S,p);
    p=p->lchild;
    }
    else
    {
    pop(S,p);
    cout<data<<" ";
    p=p->rchild;
    }
    }
    }
    //=========================================
    void InOrder(BiTNode *T)
    {
    if(T==NULL)
    return;
    InOrder(T->lchild);
    cout<data<<" ";
    InOrder(T->rchild);
    }
    //=======================================================
    int main()
    {
    BiTNode *T;
    cout<<"请按照先序序列输入各结点所存储的元素"<<endl;
    Createbt(T);
    InOrder(T);
    cout<<endl;
    InorderTraverse(T);
    return 1;
    }

    我改了void Createbt(BiTNode *&T)里的第三行,void InOrder(BiTNode *T)里的第4行,cout<<"内存分配出错"< exit(1);//程序结束 这里,还有第一行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体