遍历二叉树
2014-02-14 12:03
148 查看
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);
}
}
递归定义的数据结构采用递归的算法进行遍历往往能达到简单可靠的效果!!!
相关文章推荐
- 二叉树非递归遍历
- 二叉树三种遍历方式的递归和循环实现
- 如何用一个栈实现二叉树的螺旋遍历
- SQL 遍历父子关系表(二叉树)获得所有子节点 所有父节点(转)
- 二叉树的遍历(C++)版
- 第十周 项目1 - 二叉树算法验证 (验证二叉树的层次遍历算法)
- 遍历二叉树的算法
- sdut 2136 数据结构实验之二叉树的建立与遍历(二叉树遍历,叶子数和深度)
- 二叉树的递归遍历
- 二叉树的后续遍历非递归实现
- 二叉树的遍历方法及递归实现
- 二叉树螺旋遍历
- 一种二叉树的建立和遍历实现
- 算法与数据结构面试题(20)-层序遍历二叉树
- (p138)只用固定量额外存储空间不用递归遍历二叉树
- LeetCode之二叉树中序迭代遍历
- 已知二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列
- 二叉树层次遍历与递归释放
- 先序遍历、中序遍历、后序遍历(二叉树)
- 二叉树创建及遍历算法(递归及非递归)