二叉树的遍历是指按照某种顺序访问二叉树中的每个节点,使每个节点被访问一次并且仅仅被访问一次。
下面介绍二叉树的三种遍历方式:
1.先序遍历
先序遍历又称先根遍历,其递归定义如下:若二叉树为空,则遍历结束,否则:
(1)访问根节点
(2)先序遍历访问根节点的左子树
(3)先序遍历访问根节点的右子树
先序遍历二叉树的定义为递归定义,算法如下。
void preorder(BinTobe *r) //先序遍历二叉树
{
if(r != NULL) //递归调佣的结束条件
{
printf("%d\t); //访问节点的数据域
preorder(bt->lchild); //先序递归遍历bt的左子树
preorder(bt->rchild); //先序递归遍历bt的右子树
}
}
先序遍历的结构示意图如下:
2.中序遍历
中序遍历又称为中根遍历,其递归定义:若二叉树为空,遍历结束,否则:
(1.)中序遍历根节点的左子树;
(2.)访问根节点
(3.)中序遍历根节点的右子树
中序遍历二叉树的递归算法如下:
void Inorder(BinTNode *r) //中序遍历二叉树r
{
if(r != NULL) //递归调用的结束条件
{
Inorder(bt ->Lchild);
printf("%d\t", bt->dta);
Inorder(bt->rchild);
}
}
3.后序遍历
后序遍历又称作后根遍历,其递归定义:若二叉树为空,遍历结束,否则,
(1.)后序遍历根节点的左子树
(2.)后序遍历根节点的右子树
(3.)访问根节点
void postorder(bintnode *r)
{
if(b != NULL)
{
postorder(bt -> lchild);
postorder(bt -> rchild);
printf("%d\t",bt->data);
}
}