今天來介紹下二叉樹的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);
- }
- }