先序遍历二叉树:(NLR)
1 访问根节点
2 先序遍历左子树
3 先序遍历右子树
void preorder(btree t){
if(t!=NULL)
{
visit(t);
preorder(t->lchild);
preorder(t->rchild);
}
}
中序遍历:
1中序遍历左子树
2访问根节点
3中序遍历右子树
void inorder(btree t){
if(t!=NULL)
{
inorder(t->lchild);
visit(t);
inorder(t->rchild);
}
}
后序遍历:
1先访问左子树
2访问右子树
3访问根节点
void postorder(btree t)
{
if(t!=NULL){
postorder(t->lchild);
postorder(t->rchild);
visit(t);
}
}
中序遍历非递归算法:
void inorder(btree t){
initstack(s);
btree p=t; //p 是遍历指针
while(p||!isempty(s))
{
if(p) //根指针进栈,遍历左子树
{
push(s,p);
p=p->lchild; //
}
else{
pop(s,p);
visit(p);
p=p=->rchild;
}
}
}
层次遍历:
void levelorder(btree t)
{
initqueue(q); //初始化辅助队列
btree p;
enqueue(q,t); //根节点入队
while(!isempty(q))
{
dequeue(q,p); //队头出队
visit(p);
if(p->lchild!=NULL)
enqueue(q,p->child);
if(p->rchild!=NULL)
enqueue(q,p->child);
}
}