栗子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 BP神经网络控制倒立摆
  • ¥20 要这个数学建模编程的代码 并且能完整允许出来结果 完整的过程和数据的结果
  • ¥15 html5+css和javascript有人可以帮吗?图片要怎么插入代码里面啊
  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算