void pre_order_traversal(BTreeNode* root)//前序遍历
{
if( root != NULL )//根结点不为空时,访问根结点中的数据
{
printf("%c, ", ((struct Node*)root)->v);
pre_order_traversal(root->left);//递归调用前序遍历函数
pre_order_traversal(root->right);
}
}
void middle_order_traversal(BTreeNode* root)//中序遍历
{
if( root != NULL )//根结点不为空时,访问根结点中的数据
{
middle_order_traversal(root->left);
printf("%c, ", ((struct Node*)root)->v);
middle_order_traversal(root->right);
}
}
void post_order_traversal(BTreeNode* root)//后序遍历
{
if( root != NULL )
{
post_order_traversal(root->left);
post_order_traversal(root->right);
printf("%c, ", ((struct Node*)root)->v);
}
}
void level_order_traversal(BTreeNode* root)//层次遍历
{
if( root != NULL )//根结点不为空
{
LinkQueue* queue = LinkQueue_Create();//创建一个队列
if( queue != NULL )//创建成功
{
LinkQueue_Append(queue, root);//压入第一层中的根结点
while( LinkQueue_Length(queue) > 0 )
{
struct Node* node = (struct Node*)LinkQueue_Retrieve(queue);//得到队头的结点
printf("%c, ", node->v);
LinkQueue_Append(queue, node->header.left);//将父母的所有的结点压入队列中
LinkQueue_Append(queue, node->header.right);
}
}
LinkQueue_Destroy(queue);
}
{
if( root != NULL )//根结点不为空时,访问根结点中的数据
{
printf("%c, ", ((struct Node*)root)->v);
pre_order_traversal(root->left);//递归调用前序遍历函数
pre_order_traversal(root->right);
}
}
void middle_order_traversal(BTreeNode* root)//中序遍历
{
if( root != NULL )//根结点不为空时,访问根结点中的数据
{
middle_order_traversal(root->left);
printf("%c, ", ((struct Node*)root)->v);
middle_order_traversal(root->right);
}
}
void post_order_traversal(BTreeNode* root)//后序遍历
{
if( root != NULL )
{
post_order_traversal(root->left);
post_order_traversal(root->right);
printf("%c, ", ((struct Node*)root)->v);
}
}
void level_order_traversal(BTreeNode* root)//层次遍历
{
if( root != NULL )//根结点不为空
{
LinkQueue* queue = LinkQueue_Create();//创建一个队列
if( queue != NULL )//创建成功
{
LinkQueue_Append(queue, root);//压入第一层中的根结点
while( LinkQueue_Length(queue) > 0 )
{
struct Node* node = (struct Node*)LinkQueue_Retrieve(queue);//得到队头的结点
printf("%c, ", node->v);
LinkQueue_Append(queue, node->header.left);//将父母的所有的结点压入队列中
LinkQueue_Append(queue, node->header.right);
}
}
LinkQueue_Destroy(queue);
}
}
递归定义的数据结构采用递归的算法进行遍历往往能达到简单可靠的效果!!!