#include <iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSIZE 100
#define STACKINCREMENT 10
#define MAXQSIZE 100//队列
using namespace std;
typedef struct BiNode
{//定义二叉树结构
char data;
struct BiNode *lchild,*rchild;
}*BiTree,BiTNode;
void CreateBiTree(BiTree &T)
{//先序创建二叉树
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T)
{//先序遍历
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse( BiTree T ) {
if(T)
{
InOrderTraverse(T->lchild);
cout <<T->data;
InOrderTraverse(T->rchild);
}
} // InOrderTraverse
void PostOrderTraverse(BiTree T)
{//后序遍历
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data;
}
}
void Insert(BiTree &T,int e)//二叉排序树的插入操作
{
if(!T)//找到插入位置,递归结束
{
BiTree S;
S=new BiTNode;//生成新节点
S->data=e;
S->lchild=S->rchild=NULL;
T=S;//把新节点*S链接到已找到的插入位置
}
else if(e<T->data) Insert(T->lchild,e);
else if(e>T->data) Insert(T->rchild,e);
}
typedef int SElemType; // 定义栈元素类型
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef struct{//顺序栈的存储结构
SElemType *base;//栈底指针
SElemType *top;//栈顶指针
int stacksize;//栈可用的最大容量
}SqStack;//栈结构
Status InitStack(SqStack &S)
{//构造一个空栈S
S.base=new SElemType[MAXSIZE];//分配一个最大容量为MAXSIZE的数组空间
if(!S.base) return ERROR;//存储分配失败
S.top=S.base;//top初始值为base,空栈
S.stacksize=MAXSIZE;//stacksize置为栈的最大容量MAXSIZE
return OK;
}//构建空栈S
Status StackEmpty(SqStack S)
{
if(S.top=S.base) return OK;
else return ERROR;
}//判断栈是否为空
Status GetTop(SqStack S,SElemType &e)
{
if(S.top==S.base) return ERROR;
e=*(S.top-1);
return OK;
}
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize){
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//插入
Status Pop(SqStack &S,SElemType &e)
{
if(S.base==S.top) return ERROR;
e=*--S.top;
return OK;
}//删除
void MiDTraverse(BiTree T) { //中序遍历二叉树,非递归实现
SqStack S;
InitStack(S);
BiTree p,q;
p=T;
q=new BiTNode;
while(p||!StackEmpty(S)){
if(p){
Push(S,p);
p=p->lchild;
}
else {
Pop(S,q);
cout<<q->data;
p=q->rchild;
}}}
BiTree Search(BiTree T,int e)//二叉排序树的元素查找
{
if(!T||T->data==e) return T;
else if(e<T->data) return Search(T->lchild,e);
else if(e>T->data) return Search(T->rchild,e);
}
typedef BiTree QElemType;
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;//队列
Status InitQueue(SqQueue &Q)
{
Q.base = (QElemType *)malloc (MAXQSIZE * sizeof(QElemType));
if(!Q.base) return ERROR;
Q.front=Q.rear=0;
return OK;
}//构造一个空队列Q
Status EnQueue(SqQueue &Q,QElemType e)
{
// 插入元素e为Q的新的队尾元素
// 请补全代码
if((Q.rear + 1)% MAXQSIZE == Q.front)return ERROR;
Q.base[Q.rear] = e ;
Q.rear = (Q.rear + 1) % MAXQSIZE;
return OK;
}
Status DeQueue(SqQueue &Q, QElemType &e)
{
// 若队列不空, 则删除Q的队头元素, 用e返回其值, 并返回OK; 否则返回ERROR
// 请补全代码
if(Q.front == Q.rear) return ERROR;
e = Q.base[Q.front];
Q.front = (Q.front +1) % MAXQSIZE;
return OK;
}
Status FTraverse(BiTree T)
{
BiTree A,L,R;
SqQueue S;
InitQueue(S);
A=T;
EnQueue(S,T);
while(S.front!=S.rear)
{
DeQueue(S,A);
printf("%d ",A->data);
L=A->lchild;
R=A->rchild;
if(L) EnQueue(S,L);
if(R) EnQueue(S,R);
}
return OK;
}
int main() //主函数
{
int n;
cin>>n;
BiTree T;
int x,y,z;
CreateBiTree(T,n);
PreOrderTraverse(T);cout<<endl;
InOrderTraverse(T);cout<<endl;
PostOrderTraverse(T);cout<<endl;
cin>>x>>y>>z;
if(Search(T,x)) cout<<"1"<<endl;
else cout<<"0"<<endl;
if(Search(T,y)) cout<<"1"<<endl;
else cout<<"0"<<endl;
Insert(T,z);
PreOrderTraverse(T);cout<<endl;
InOrderTraverse(T);cout<<endl;
PostOrderTraverse(T);cout<<endl;
MiDTraverse(T);cout<<endl;
FTraverse(T);cout<<endl;
return 0;
}//main
报错信息呢?
这两处实参与形参不对应,仔细看看函数原型的形参类型;
这里也一样是参数问题,原型只有一个形参,这里调用直接传了2个。