您的位置:首页 > 其它

遍历二叉树

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);

    }
}

递归定义的数据结构采用递归的算法进行遍历往往能达到简单可靠的效果!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: