1、后序二叉树遍历算法
<1>递归算法
遵循LRN的规则
void PostOrder(BiTree T){
if(T){
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T);
}
}
<2>非递归算法
使用栈来满足要求
void PostOrder2(BiTree T){
InitStack(S);
BiTNode *p = T;
BiTNode *r = NULL;
while(p || !IsEmpty(S)){
if(p){
push(S,p);
p = p->lchild;
}
else{
GetTop(S,p);
if(p->rchild && p->rchild != r)
p = p->rchild;
else{
pop(S,p);
visit(p);
r = p;
p = NULL;
}
}
}
}
2、中序二叉树遍历算法
<1>递归算法
遵循LNR的规则
void InOrder(BiTree T){
if(T){
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
<2>非递归算法
void InOrder2(BiTree T){
InitStack(S);
BiTNode *p = T;
while(p || !IsEmpty(S)){
if(p){
push(S,p);
p = p->lchild;
}
else{
pop(S,p);
visit(p);
p = p->rchild;
}
}
3、前序二叉树遍历算法
<1>递归算法
遵循NLR的规则
void PreOrder(BiTree T){
if(T){
PreOrder(T->lchild);
visit(T);
PreOrder(T->rchild);
}
}
<2>非递归算法
void PreOrder2(BiTree T){
InitStack(S);
BiTNode *p = T;
while(p || !IsEmpty(S)){
if(p){
push(S,p);
visit(p);
p = p->lchild;
}
else{
pop(S,p);
p = p->rchild;
}
}
4、二叉树层次遍历算法
层析遍历算法需要借助队列的使用
void level(BiTree T){
InitQueue(Q);
BiTNode *p;
EnQueue(Q,T);
while(!IsEmpty(Q)){
DeQueue(Q,p);
visit(p);
if(p->lchild)
EnQueue(p->lchild);
if(p->rchild)
EnQueue(p->rchild);
}
}