二叉树的遍历

#define MaxSize 100

 

typedef struct node{

int data;

node* lchild;

node* rchild;

}TNode;

 

void  preOrder(TNode *b)

{

TNode *stack[MaxSize], *p; 

int top = -1;

stack[++top] = b;

while(top != -1)

{

p = stack[top--];

cout<< p->data<<"/t";

if(p->rchild != NULL)

{

stack[++top] = p->rchild;

}

if(p->lchild != NULL)

{

stack[++top] = p->lchild;

}

}

}

 

void inOrder(TNode * b)

{

TNode * stack[MaxSize], *p;

int top= -1;

stack[++top] = b;

p = b->lchild;

while(p != NULL)

{

stack[++top] = p;

p = p->lchild;

}

while(top != -1)

{

p = stack[top--];

cout<<p->data<<"/t";

if(p->rchild != NULL)

{

stack[++top] = p->rchild;

p = p->rchild;

p = p->lchild;

while(p != NULL)

{

stack[++top] = p;

p = p->lchild;

}

}

}

 

}

 

void postOrder(TNode* b)

{

TNode * stack[MaxSize], *p,*q;

int top = -1;

stack[++top] = b;

p = b->lchild;

 

int heigh = 0;

 

while(p != NULL)

{

heigh++;

stack[++top] = p;

p = p->lchild;

}

q = NULL;

while(top != -1)

{

p = stack[top];

if(p ->rchild == NULL||p->rchild == q)

{

cout<<p->data<<"Level:"<<heigh<<"/t";

top--;

q = p;

heigh--;

}

else if(q != p->rchild)

{

heigh++;

stack[++top] = p->rchild;

p = p->rchild;

p = p->lchild;

while(p != NULL)

{

heigh++;

stack[++top] = p;

p = p->lchild;

}

}

}

}

 

void levelOrder(TNode* b)

{

TNode* quene[MaxSize], *p;

int level[MaxSize];

int front = 0, rear = 0;

quene[rear++] = b;

level[front] = 0;

while(front != rear)

{

p = quene[front];

cout<<p->data<<"level:"<<level[front]<<"/t";

if(p->lchild!= NULL)

{

level[rear] = level[front]+1;

quene[rear++] = p->lchild;

}

if(p->rchild!= NULL)

{

level[rear] = level[front]+1;

quene[rear++] = p->rchild;

}

front++;

}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值