Cho cây nhị phân, hàm tìm duyệt theo cấp độ (Level Order) của cây, in từng dòng.
Duyệt Level Order: Trái - Gốc - Phải, nghĩa là in con trái, rồi gốc, rồi con phải. Nhưng ở đây in từng dòng: bắt đầu từ trái đến phải của mỗi cấp độ.

Kết quả của cây trên:
Cấp 0: 3 Cấp 1: 2 1 Cấp 2: 10 20 30
Thuật toán
BẮT ĐẦU
BƯỚC 1: CẤU TRÚC NÚT: struct node { node *left, *right; int data; }
BƯỚC 2: HÀM TẠO NÚT newnode(int data)
BƯỚC 3: HÀM DUYỆT levelorder(node *root)
NẾU root == NULL TRẢ VỀ
TẠO queue<node*> que, que.push(root)
WHILE que.empty() == false
count = que.size()
WHILE count > 0
node *node = que.front()
IN node->data
que.pop()
NẾU node->left != NULL que.push(node->left)
NẾU node->right != NULL que.push(node->right)
count--
KẾT THÚC Ví dụ mã C++
#include <iostream>
#include <queue>
using namespace std;
struct node {
struct node *left;
int data;
struct node *right;
};
void levelorder(node *root) {
if (root == NULL) return;
queue<node*> que;
que.push(root);
while (que.empty() == false) {
int count = que.size();
while (count > 0) {
node *n = que.front();
cout << n->data << " ";
que.pop();
if (n->left != NULL) que.push(n->left);
if (n->right != NULL) que.push(n->right);
count--;
}
}
}
node* newnode(int data) {
node *temp = new node;
temp->data = data;
temp->left = NULL;
temp->right = NULL;
return temp;
}
int main() {
node *root = newnode(3);
root->left = newnode(2);
root->right = newnode(1);
root->left->left = newnode(10);
root->left->right = newnode(20);
root->right->right = newnode(30);
levelorder(root);
return 0;
} Kết quả
Chạy chương trình cho kết quả:
3 2 1 10 20 30