数据结构学习笔记
一.先序遍历
先序遍历二叉树递归定义
if(二叉树为空)
遍历结束;
else
访问根节点,先序遍历根的左子树,先序遍历根的右子树
基于二叉链表
------
typedef struct BiNode *BiTree; //节点指针类型
status PreOrderTraverse(BiNode T,status(*visit)(TElemType &e))
{ //先序遍历二叉树
if(T)
{
visit(T->Data); //访问节点
PreorderTraverse(T->lchild,visit);//遍历左子树
PreorderTraverse(T->rchild,visit);//遍历右子树
}
}
二.中序遍历
先序遍历二叉树递归定义
if(二叉树为空)
遍历结束;
else
访问根的左子树,访问中序根节点,中序遍历根的右子树
typedef struct BiNode *BiTree; //节点指针类型
void InOrderTraverse(BiTree T)
{ //先序遍历二叉树
if(T)
{
InOrderTraverse(T->lchild); //递归访问左子树
printf("%c",T->data); //递归结点
InOrderTraverse(T->rchild); //递归访问右子树
}
return;
}
三.后序遍历
先序遍历二叉树递归定义
if(二叉树为空)
遍历结束;
else
后遍历根的左子树,后序遍历根的右子树,访问根节点
typedef struct BiNode *BiTree; //节点指针类型
void PostOrderTraverse(BiTree T)
{ //先序遍历二叉树
if(T)
{
PostOrderTraverse(T->lchild); //递归访问左子树
PostOrderTraverse(T->rchild); //递归访问右子树
printf("%c",T->data); //递归结点
}
return;
}
说明:
三种遍历方式访问节点顺序相同,从根节点出发再回 到根节点
不同的是访问时机, 先序遍历首次遇到该节点便访问,中序是第二次遇到访问
后序是第三次遇到同一节点再访问