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

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

#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);//程序结束 这里,还有第一行

    打赏 评论

相关推荐 更多相似问题