遍历
1.前序遍历
规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。
/*二叉树的前序遍历递归算法*/
void PreOrderTraverse(BiTree T)
{
If(T==NULL)
return;
printf(“%c”,T->data);//显示结点数据,可以更改为其他对结点操作
PreOrderTraverse(T->lchild);//再先序遍历左子树
PreOrderTraverse(T->rchild);//最后先序遍历右子树
}
2.中序遍历
规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根节点的左子树,然后是访问根结点,最后中序遍历右子树。
树,再前序遍历右子树。
/*二叉树的中序遍历递归算法*/
void InOrderTraverse(BiTree T)
{
If(T==NULL)
return;
InOrderTraverse(T->lchild);//中序遍历左子树
printf(“%c”,T->data);//显示结点数据,可以更改为其他对结点操作
InOrderTraverse(T->rchild);//最后中序遍历右子树
}
3.后序遍历
规则是若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后是访问根结点。
/*二叉树的后序遍历递归算法*/
void PostOrderTraverse(BiTree T)
{
If(T==NULL)
return;
PostOrderTraverse(T->lchild);//先后序遍历左子树
PostOrderTraverse(T->rchild);//再后序遍历右子树
printf(“%c”,T->data);//显示结点数据,可以更改为其他对结点操作
}
4.层序遍历
规则是若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。