Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

In duyệt theo cấp độ (Level Order) dòng per dòng trong C++


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 độ.

In duyệt theo cấp độ (Level Order) dòng per dòng trong C++

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