運行的時候沒有報錯,也沒有警告,但是輸入資料后沒有輸出,不知道為什么orz
請大佬幫忙看看,謝謝orz
頭檔案
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 300//存盤空間初始化分配量
#define STACKINCREMENT 10//存盤空間分配增量
#define MAXLEN 10
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef BiTree ElemType;
typedef struct
{
ElemType *base;
ElemType *top;//堆疊頂指標
int stacksize;
}SqStack;
//宣告
Status InitStack(SqStack &S);//初始化
Status Push(SqStack &S,ElemType e);//向堆疊頂插入元素
Status Pop(SqStack &S);//出堆疊
Status StackEmpty(SqStack &S);
Status GetTop(SqStack S, ElemType &e);
Status StackEmpty(SqStack &S);
Status CreateBiTree(BiTree &T,char str[]);
Status PreOrderTraverse(BiTree T); //先序遍歷
Status InOrderTraverse(BiTree T); //中序遍歷
Status PostOrderTraverse(BiTree T); //后序遍歷
Status SqStackInOrderTraverse(BiTree T);//利用堆疊非遞回遍歷
Status InitStack(SqStack &S)
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!S.base) exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
};
Status Push(SqStack &S,ElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(ElemType*)realloc(S.base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(ElemType));
if(!S.base) exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
};
Status Pop (SqStack &S, ElemType &e) {
// 若堆疊不空,則洗掉S的堆疊頂元素,
// 用e回傳其值,并回傳OK;
// 否則回傳ERROR
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
Status StackEmpty(SqStack &S)
{
if(S.top==S.base) return TRUE;
else return FALSE;
};
Status DestroyStack(SqStack &S)
{
free(S.base);
S.base=NULL;
S.top=NULL;
S.stacksize=0;
return OK;
}
int StackLength(SqStack S)
{
return S.top-S.base;
}
Status GetTop(SqStack S, ElemType &e)
{
if (S.top==S.base) return ERROR;
e=*--S.top;
return OK;
}
Status ClearStack(SqStack &S)
{
S.top = S.base;
return OK;
}
Status StackTravers(SqStack S, Status (*visit)(ElemType))
{
ElemType *p=S.base;
if (S.top==S.base) return ERROR;
do
{
if (!visit(*p)) return ERROR;
}while (p++ !=S.top );
return OK;
}
//////////////////////////////////////////////////
Status CreateBiTree(BiTree &T,char str[])
{
static int i = 0;
char data;
data=https://bbs.csdn.net/topics/str[i++];
scanf(str);
if(datahttps://bbs.csdn.net/topics/==' ') T=NULL;
else
{ T=new BiTNode;
T->data=https://bbs.csdn.net/topics/data;
CreateBiTree(T->lchild,str);
CreateBiTree(T->rchild,str);
}
return OK;
}
Status PreOrderTraverse(BiTree T){ //先序遍歷
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
} return OK;
}
Status InOrderTraverse(BiTree T){ //中序遍歷
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
} return OK;
}
Status PostOrderTraverse(BiTree T){ //后序遍歷
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
} return OK;
}
Status SqStackInOrderTraverse(BiTree T){
SqStack S;
BiTree p=T;
InitStack(S);
while(p||!StackEmpty(S)){
if(p) {Push(S,p); p=p->lchild;}
else{
Pop(S,p);
printf("%c",p->data);
p=p->rchild;
}//else
}//while
return OK;
}
主函式
#include"B1.h"
int main()
{
BiTree tree;
char str[100];
cout<<"請輸入資料";
CreateBiTree(tree,str);
cout<<"PreOrder:";
PreOrderTraverse(tree);
cout<<endl;
cout<<"InOrder:";
InOrderTraverse(tree);
cout<<endl;
cout<<"PostOrder:";
PostOrderTraverse(tree);
cout<<endl;
SqStackInOrderTraverse(tree);
cout<<endl;
return 0;
}
uj5u.com熱心網友回復:
你這叫新手,你好像在侮辱人
uj5u.com熱心網友回復:
C與C++大雜燴,亂成一鍋粥,誰看誰難受。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/221251.html
標籤:C語言
下一篇:鍵盤焦點,這是什么情況??
