有無大佬幫忙康康這段代碼哪里不對啊,為什么非遞回演算法運行不出結果
#include<stdio.h>
#include<stdlib.h>
#define MAX_NODE 50
#define STACKINITSIZE 20
#define INCREASEMENT 10
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef struct BTNode {
char data ;
struct BTNode *Lchild ,*Rchild ;
}BTNode,*BTree; ;
BTNode *Create_BTree(void) {
BTNode *T , *p , *s[MAX_NODE] ;
char ch ;
int i , j ;
while (1){
scanf("%d", &i) ;
if (i==0)
break ;
else
{
ch=getchar();
p=(BTNode*)malloc(sizeof(BTNode));
p->data=https://bbs.csdn.net/topics/ch;
p->Lchild=p->Rchild=NULL;
s[i]=p;
if(i==1)
T=p;
else{
j=i/2;
if(i%2==0)
s[j]->Lchild=p;
else
s[j]->Rchild=p;
}
}
}
return(T);
}
void RInorderTraverse(BTNode *T)
{
if(T==NULL)
return;
else{
RInorderTraverse(T->Lchild);
printf("%c", T->data);
RInorderTraverse(T->Rchild);
}
}
typedef struct SqStack
{
BTNode *base;
BTNode *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
S.base = (BTNode*)malloc(STACKINITSIZE * sizeof(BTNode));
if(!S.base)
return 0;
S.top = S.base;
S.stacksize = STACKINITSIZE;
return 1;
}
int Push(SqStack &S,BTNode e)
{
if(S.top - S.base >= S.stacksize)
{
S.base = (BTNode*)realloc(S.base,(STACKINITSIZE + INCREASEMENT) * sizeof(BTNode));
if(!S.base)
return 0;
S.stacksize = 30;
}
*S.top = e;
S.top ++;
return 1;
}
int Pop(SqStack &S,BTNode &e)
{
if(S.base == S.top)
return 0;
S.top --;
e = *S.top;
return 1;
}
int StackEmpty(SqStack S)
{
if(S.base == S.top)
return 1;
else
return 0;
}
int NRInorderTraverse(BTree T)
{
SqStack s;
InitStack(s);
BTree p=T;
BTNode e;
while(!p||!StackEmpty(s))
{
if(p)
{
Push(s,*p);
p=p->Lchild;
}
else
{
Pop(s,e);
printf("%d",e.data);
p=e.Rchild;
}
}
printf("\n");
return 1;
}
int main(){
BTree T = NULL;
printf("請輸入二叉樹\n");
T=Create_BTree();
printf("遞回演算法中序遍歷二叉樹結果為:\n");
RInorderTraverse(T);
printf("\n");
printf("非遞回演算法中序遍歷二叉樹結果為:\n");
NRInorderTraverse(T);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/66109.html
標籤:C語言
上一篇:宏嵌套展開后提示引數個數不夠
下一篇:求字串最大的一個
