今天来介绍下二叉树的4种遍历方式,如果对二叉树不熟悉的话,请先去本系列二叉树的介绍中先学习。
遍历:单链表的遍历是指从第一个结点开始(下标为0的结点),按照某种次序依次访问每一个结点。
二叉树的遍历是指从根结点开始,按照某种次序依次访问二叉树中的所有结点。
OK,下面就分别介绍前序遍历,中序遍历,后序遍历,层次遍历

代码:
- void pre_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- printf("%c, ", ((Node*)root)->v);
-
- pre_order_traversal(root->left);
- pre_order_traversal(root->right);
- }
- }

代码:
- void middle_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- middle_order_traversal(root->left);
-
- printf("%c, ", ((Node*)root)->v);
-
- middle_order_traversal(root->right);
- }
- }

代码:
- void post_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- post_order_traversal(root->left);
- post_order_traversal(root->right);
-
- printf("%c, ", ((Node*)root)->v);
- }
- }

代码:
- void level_order_traversal(BTreeNode* root)
- {
- if(NULL != root)
- {
- LinkQueue* queue = LinkQueue_Create();
-
- if(NULL != queue)
- {
- LinkQueue_Append(queue, root);
-
- while(0 < LinkQueue_Length(queue))
- {
- Node* node = (Node*)LinkQueue_Retrieve(queue);
-
- printf("%c, ", node->v);
-
- LinkQueue_Append(queue, node->header.left);
- LinkQueue_Append(queue, node->header.right);
- }
- }
-
- LinkQueue_Destroy(queue);
- }
- }