2 u012574931 u012574931 于 2013.12.28 10:18 提问

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

#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个回答

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

u012574931
u012574931 谢谢
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
二叉树的先序遍历(非递归算法)
 /**********非递归遍历二叉树**********/ #include#include#define Stack_Init_Size 100#define StackIncreament 10typedef struct BiLnode{ int data; struct BiLnode *lchild; struct BiLnode *rchild;}BiLnode,*BiTr
建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
先序遍历:若二叉树为空,则空操作;否则访问根节点;先序遍历左子树;先序遍历右子树。 中序遍历:若二叉树为空,则空操作;否则中序遍历左子树;访问根节点;中序遍历右子树。 后序遍历:若二叉树为空,则空操作;否则后序遍历左子树;后序遍历右子树;访问根节点。/* * Created by Microsoft Visual Studio 2013 * @author: Teresa * @date: 20
二叉树先序遍历的非递归算法
在前面一文,说过二叉树的递归遍历算法(二叉树先根(先序)遍历的改进 ),此文主要讲二叉树的非递归算法,采用栈结构 总结先根遍历得到的非递归算法思想如下: 1)入栈,主要是先头结点入栈,然后visit此结点 2)while,循环遍历当前结点,直至左孩子没有结点 3)if结点的右孩子为真,转入1)继续遍历,否则退出当前结点转入父母结点遍历转入1) 先看符合此思想的算法: int PreO
二叉树前序遍历的递归与非递归算法
前几天参加了阿里暑期实习的内推面试,发现自己的数据结构算法基础特别薄弱,比如其中一个问题是中序遍历的递归与非递归算法,我平时看数据结构只知道递归算法,非递归的算法直接被问懵逼了,在思考了几十秒之后想出了用数组存放每次遍历节点的父节点,然后用for循环遍历,虽然可以实现,但是我觉得面试官听到之后估计在吐血,还有HashMap底层自己明明知道用的是散列表,在紧张之下我竟然说是数组,面完之后被舍友吐槽,
二叉树先序遍历(包含递归和非递归(2种方法))
二叉树先序遍历:中 左 右 二叉树中序遍历: 左 中 右 二叉树后序遍历: 左 右 中 本文以二叉树的先序遍历为例,讲解递归和非递归两种方法求解。 首先给出二叉树节点的结构 struct Node { int  value; Node left; Node right; Node(int x)  {this.value = x;} }; 例:二叉树如图所示 1  
二叉树先序遍历、中序遍历和后序遍历非递归算法 C++源码
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
二叉树的创建及其遍历
 按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作实现),求二叉树的深度(后序遍历)。
二叉树的基本操作,包括前序、中序、后序遍历的递归和非递归算法
二叉树的基本操作,包括前序、中序、后序遍历的递归和非递归算法,不得不下的资源
【数据结构】二叉树的前中后序遍历递归和非递归实现
二叉树有很多操作,而二叉树的遍历只是其中的一个基本操作。 二叉树的遍历方式有3种:前序遍历,中序遍历,后序遍历。前中后遍历顺序是根据什么时候遍历根节点来说的。
实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
#include"iostream" #define maxsize 50 using namespace std; class node{ private: char data; node* lchild; node* rchild; public: void createnode(node *&,char *); void fnode(node* b) { if(b!=NULL