二叉树的遍历一般分为先序遍历,中序遍历,后序遍历和层次遍历。我们先来讲讲什么是先序遍历。
(1)访问根节点;
(2)先序遍历左子树;
(3)先序遍历右子树。
递归算法如下:
void PreOrder(BiTree T){
if(T!=NULL){
visit(T); //访问根节点
PreOrder(T->lchild);//递归遍历左子树
PreOrder(T->rchild);//递归遍历右子树
}
}
(1)中序遍历左子树;
(2)访问根节点;
(3)中序遍历右子树。
相应的递归算法如下:
void InOrder(BiTree T){
if (T!=NULL){
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根节点;
后序遍历递归算法如下:
void PostOrder(BiTree T){
if(T!=NULL){
PostOrder(T->lchild);//访问左子树
PostOrder(T->rchild);//访问右子树
visit(T);//访问根节点
}
}
在递归遍历中,递归工作栈的深度为二叉树的深度,因此在最坏的情况下,二叉树是有n个结点且深度为n的单支树,遍历算法的空间复杂度为O(n)。