二叉树的遍历

来源:互联网 发布:淘宝客怎样推广 编辑:程序博客网 时间:2024/04/26 13:52

#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++;

}

}
原创粉丝点击