二叉树是树的一种特殊结构,在二叉树中每个节点最多只能有两个子节点。在二叉树中最重要的操作莫过于遍历,即按照某一顺序访问树中所有节点。通常树有几种遍历方式。
- 前序遍历:先访问根节点,再访问左子节点,最后访问右子节点。
- 中序遍历:先访问左子节点,再访问根节点,最后访问右子节点。
- 后序遍历:先访问左子节点,再访问右子节点,最后访问根节点。
这三种方式都有循环和递归两种实现方式。其中递归实现比循环实现要简洁很多。
一、三种方式的递归实现
- 前序遍历
void pre_traverse(BTree pTree)
{
if(pTree)
{
printf(”%c ”,pTree->data);
if(pTree->pLchild)
pre_traverse(pTree->pLchild);
if(pTree->pRchild)
pre_traverse(pTree->pRchild);
}
}
- 中序遍历
void in_traverse(BTree pTree)
{
if(pTree)
{
if(pTree->pLchild)
in_traverse(pTree->pLchild);
printf(”%c ”,pTree->data);
if(pTree->pRchild)
in_traverse(pTree->pRchild);
}
}
- 后序遍历
void beh_traverse(BTree pTree)
{
if(pTree)
{