1、二叉树的遍历
广度遍历二叉树://笔试中至少出现过2次以上
void GuangDuTraverse(Node *root)
{
Node *q;
InitQueue(Q);
EnQueue(Q,root);
while(!QueueEmpty(Q))
{
DeQueue(Q,q);
printf(q->value);
if(q->lchild)
{ EnQueue(Q,q->lchild); }
if(q->rchild)
{ EnQueue(Q,q->rchild); }
}
}
深度遍历二叉树:
先序 根左右
void PreOrderTraverse(Node *root)
{
InitStack(S);
Push(S,root);
while(!StackEmpty(S))
{
while(GetTop(S,p)&&p) //注意GetTop只是取栈顶元素的值,不弹出栈顶元素
{
output(p->data);//先序
Push(s,p->lchild);
}
Pop(S,p); //为了弹栈顶的空指针
if(!StackEmpty(S))
{
Pop(S,p);
//中序
Push(S,p->rchild);
}
}
}
中序 左根右
void InOrderTraverse(Node *root)
{
InitStack(S);
Push(S,root);
while(!StackEmpty(S))
{
while(GetTop(S,p)&&p)
{
Push(s,p->lchild);
}
Pop(S,p);
if(!StackEmpty(S))
{
Pop(S,p);
output(p->data);
Push(S,p->rchild);
}
}
}
后序 左右根
void PostOrederTraverse(Node *root)
{
InitStack(S);
p=root;
do
{
while(p)
{
Push(S,p);
p=p->lchild;
}
b=NULL;
sign = 1;
while(!StackEmpty(S)&&sign)
{
GetTop(S,p);
if(p->rchild == b)
{
output(b->data);
Pop(S,p);
b=p;
}
else
{
p=p->rchild;
sign=0;
}
}
}while(!StackEmpty(S))
}
广度遍历二叉树://笔试中至少出现过2次以上
void GuangDuTraverse(Node *root)
{
Node *q;
InitQueue(Q);
EnQueue(Q,root);
while(!QueueEmpty(Q))
{
DeQueue(Q,q);
printf(q->value);
if(q->lchild)
{ EnQueue(Q,q->lchild); }
if(q->rchild)
{ EnQueue(Q,q->rchild); }
}
}
深度遍历二叉树:
先序 根左右
void PreOrderTraverse(Node *root)
{
InitStack(S);
Push(S,root);
while(!StackEmpty(S))
{
while(GetTop(S,p)&&p) //注意GetTop只是取栈顶元素的值,不弹出栈顶元素
{
output(p->data);//先序
Push(s,p->lchild);
}
Pop(S,p); //为了弹栈顶的空指针
if(!StackEmpty(S))
{
Pop(S,p);
//中序
Push(S,p->rchild);
}
}
}
中序 左根右
void InOrderTraverse(Node *root)
{
InitStack(S);
Push(S,root);
while(!StackEmpty(S))
{
while(GetTop(S,p)&&p)
{
Push(s,p->lchild);
}
Pop(S,p);
if(!StackEmpty(S))
{
Pop(S,p);
output(p->data);
Push(S,p->rchild);
}
}
}
后序 左右根
void PostOrederTraverse(Node *root)
{
InitStack(S);
p=root;
do
{
while(p)
{
Push(S,p);
p=p->lchild;
}
b=NULL;
sign = 1;
while(!StackEmpty(S)&&sign)
{
GetTop(S,p);
if(p->rchild == b)
{
output(b->data);
Pop(S,p);
b=p;
}
else
{
p=p->rchild;
sign=0;
}
}
}while(!StackEmpty(S))
}