1、简介
二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点。
通常有以下几种方式:
- 前序遍历
- 中序遍历
- 后序遍历
- 层次遍历
以上几种遍历方式,是根据在遍历时访问根结点中数据的顺序不同来命名的;
2、前序遍历
算法实现:
void pre_order_traversal(BTreeNode *root)
{
if(root != NULL)
{
printf_Data(root);
printf("\t");
pre_order_traversal(root->left);
pre_order_traversal(root->right);
}
}
3、中序遍历
算法实现:
void printf_Data(BTreeNode *node)
{
if(node != NULL)
{
printf("%c",((Node *)node)->v);
}
}
void middle_order_traversal(BTreeNode *root)
{
if(root != NULL)
{
middle_order_traversal(root->left);
printf_Data(root);
printf("\t");
middle_order_traversal(root->right);
}
}
4、后序遍历
算法实现:
void after_order_traversal(BTreeNode *root)
{
if(root != NULL)
{
after_order_traversal(root->left);
after_order_traversal(root->right);
printf_Data(root);
printf("\t");
}
}
5、层次遍历
算法实现:
层次遍历的实现,可依赖队列,算法思路如下:
- 将根结点追加到队列中;
- 如果队列中元素个数大于0,将队首元素出队;
- 输出该节点中的数据;
- 分别将该结点的左结点和右结点追加到队列;
- 重复2-4,直到条件不满足;
void level_order_traversal(BTreeNode *root)
{
if(root != NULL)
{
LinkQueue *queue = LinkQueue_Create();
LinkQueue_Append(queue,root);
while(LinkQueue_Length(queue) > 0)
{
BTreeNode *node = (BTreeNode*)LinkQueue_Retrieve(queue);
printf_Data(node);
printf("\t");
LinkQueue_Append(queue,node->left);
LinkQueue_Append(queue,node->right);
}
LinkQueue_Destroy(queue);
}
}
6、完整源码下载
文件名:traversalbtree-1.0.tar.gz
链接: http://pan.baidu.com/s/1kTkXCqj 密码: gp88
编译步骤:
0.1 解压缩:tar -zxvf traversalbtree-1.0.tar.gz
0.2 进入目录:./configure
0.3 生成Seqlist:make
0.4 运行程序:./TraversalBtree