linux c非递归遍历目录,Linux上的二叉树借助Stack非递归遍历

C/C++ code//BiTree.c

#include

#include"BiTree.h"

#include

SqStack InitStack(SqStack S)

{

S=(SqStack)malloc(sizeof(struct Stack));

S->base =(struct BiTNode **)malloc(STACK_INIT_SIZE*sizeof(struct BiTNode**));

if(!S->base) exit(1);

S->top=S->base;

S->stacksize =STACK_INIT_SIZE;

return S;

}

BiTree GetTop(SqStack S)

{

BiTree e;

BiTree *p;

p=S->top;

if(S->top == S->base) return 0 ;

p=p-1;

e=*p;

return e;

}

SqStack Push(SqStack S,BiTree e)

{

if((S->top)-(S->base)>=(S->stacksize)){

S->base =(BiTree*)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(struct BiTNode**));

S->top=S->base+S->stacksize;

S->stacksize+=STACKINCREMENT;

}

*(S->top)=e;

S->top++;

return S;

}

BiTree Pop(SqStack S)

{

BiTree e;

if(S->top ==S->base) return NULL;

S->top=S->top-1;

e=*S->top;

return e;

}

int StackEmpty(SqStack S)

{

if(S==NULL||(S->base == S->top))

{

return 1;

}

else

{

return 0;

}

}

//void Print(SqStack S)

//{

// BiTree p;

// p=S->top-1;

// while(p!=S->base)

// {

// printf("%4c",*p);

// p=p-1;

// }

// printf("%4c",*S->base);

//}

BiTree *CreateBiTree(BiTree *T)//ŽŽœš¶þ²æÊ÷

{

char ch;

ch=getchar();

if(ch=='#') T=NULL;

else

{

if(!((*T)=(BiTree)malloc(sizeof(struct BiTNode)))) exit(FALUSE);

(*T)->data=ch;

CreateBiTree(&(*T)->lchild);

CreateBiTree(&(*T)->rchild);//ŽËŸäûÓÐÖŽÐÐ

}

//scanf("%c",&ch);

return (*T);

}

/*Status CreateBiTree(BiTree &T)//ŽŽœš¶þ²æÊ÷

{

char ch;

ch=getchar();

if(ch=='#') T=NULL;

else

{

if(!(T=(BiTree)malloc(sizeof(struct BiTNode)))) exit(FALUSE);

T->data=ch;

CreateBiTree(T->lchild);

CreateBiTree(T->rchild);//ŽËŸäûÓÐÖŽÐÐ

}

//scanf("%c",&ch);

return OK;

}*/

Status PreOrderTraverse(BiTree T)//ÏÈÐò±éÀú

{

//µÝ¹é

//if(T)

//{

// printf("%c",T->data);

// PreOrderTraverse(T->lchild);

// PreOrderTraverse(T->rchild);

//}

//·ÇµÝ¹é

return OK;

}

Status InOrderTraveerse(BiTree T)//ÖÐÐò±éÀú

{

//µÝ¹é

//if(T)

//{

// InOrderTraveerse(T->lchild);

// printf("%c",T->data);

// InOrderTraveerse(T->rchild);

//}

//·ÇµÝ¹é

SqStack S=NULL;

S=InitStack(S);

BiTree p=NULL;

p=T;

while(p||!StackEmpty(S))

{

if(p){S=Push(S,p); p=p->lchild;}

else

{

p=Pop(S);

printf("%4c",p->data);

p=p->rchild;

}

}

return OK;

}

//

Status PostOrderTravaerse(BiTree T)//ºóÐò±éÀú

{

//µÝ¹é

//if(T)

//{

// PostOrderTravaerse(T->lchild);

// PostOrderTravaerse(T->rchild);

// printf("%c",T->data);

//}

//·ÇµÝ¹é

return OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值