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

In cấp độ của tất cả nút trong cây nhị phân (C++)


Cho cây nhị phân, in cấp độ của mỗi khóa trong nút, cấp độ bắt đầu từ 1.

In cấp độ của tất cả nút trong cây nhị phân (C++)

Trong cây trên:

10 ở cấp 1 
3 và 211 ở cấp 2 
140, 162, 100, 146 ở cấp 3

Cho khóa, in cấp độ của khóa đó.

Ví dụ

Input: 10 3 211 140 162 100 146 
Output: 
    cấp của 10 là 1 
    cấp của 3 là 2 
    cấp của 211 là 2 
    cấp của 140 là 3 
    cấp của 162 là 3 
    cấp của 100 là 3 
    cấp của 146 là 3

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 TÌM CẤP ĐỘ levels(Node* root)
    NẾU root==NULL TRẢ VỀ
    TẠO queue<pair<Node*, int> > que, que.push({root, 1})
    TẠO pair<Node*, int> par
    WHILE !que.empty()
        par = que.front(); que.pop()
        IN par.first->data VÀ par.second
        NẾU par.first->left que.push({par.first->left, par.second+1})
        NẾU par.first->right que.push({par.first->right, par.second+1})
KẾT THÚC

Ví dụ mã C++

#include <bits/stdc++.h> 
using namespace std; 

struct Node { 
    int data; 
    struct Node *left, *right; 
}; 

void levels(Node* root) { 
    if (root == NULL) return; 
    queue<pair<struct Node*, int> > que; 
    que.push({root, 1}); 
    pair<struct Node*, int> par; 
    while (!que.empty()) { 
        par = que.front(); 
        que.pop(); 
        cout << "Cấp của " << par.first->data << " là " << par.second << "\n"; 
        if (par.first->left) 
            que.push({par.first->left, par.second + 1}); 
        if (par.first->right) 
            que.push({par.first->right, par.second + 1}); 
    } 
} 

Node* newnode(int data) { 
    Node* temp = new Node; 
    temp->data = data; 
    temp->left = temp->right = NULL; 
    return temp; 
} 

int main() { 
    Node* root = NULL; 
    root = newnode(34); 
    root->left = newnode(12); 
    root->right = newnode(50); 
    root->left->left = newnode(11); 
    root->left->right = newnode(54); 
    levels(root); 
    return 0; 
}

Kết quả

Chạy chương trình cho kết quả:

Cấp của 34 là 1 
Cấp của 12 là 2 
Cấp của 50 là 2 
Cấp của 11 là 3 
Cấp của 54 là 3