#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++;
}
}
二叉树的遍历
最新推荐文章于 2024-01-27 15:36:29 发布