例如,上面這棵二叉樹層次遍歷結果爲:1 2 3 4 5node
Algorithm:ios
定義函數 levelorder(tree) 爲層次遍歷二叉樹 tree 1) 建立一個空隊列 q 2) temp_node = root // 從根節點開始遍歷 3) 只要 temp_node 不爲 NULL,則執行以下循環 a) 打印 temp_node->data. b) 將 temp_node 的子節點入隊(以先左子節點後右子節點順序)q c) 出隊一個節點並將其賦值給temp_node
#include <iostream> #include <queue> using namespace std; // 二叉樹節點 struct Node { int data; struct Node *left, *right; }; void printLevelOrder(Node *root) { if (root == NULL) return; // 建立一個空隊列 queue<Node *> q; q.push(root); while (q.empty() == false) { // 遍歷當前節點 Node *node = q.front(); cout << node->data << " "; q.pop(); // 左子節點入隊 if (node->left != NULL) q.push(node->left); // 右子節點入隊 if (node->right != NULL) q.push(node->right); } } /*
* 輔助函數
* 用給定的值建立一個二叉樹節點,起左右子節點均爲空
*/
Node* newNode(int data) { Node *temp = new Node; temp->data = data; temp->left = temp->right = NULL; return temp; } int main() { Node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); cout << "Level Order traversal of binary tree is \n"; printLevelOrder(root); return 0; }