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

Tích tất cả các nút trong cây nhị phân trong C++


Cho cây nhị phân chứa các nút, nhiệm vụ là tìm tích của tất cả các nút trong cây.

Cây nhị phân có nút gốc (root). Mỗi nút chứa dữ liệu, con trỏ left cho cây con trái, con trỏ right cho cây con phải. Để duyệt cây, dùng con trỏ tạm đi theo left hoặc right.

Tích tất cả các nút trong cây nhị phân trong C++

Đầu vào (cây như hình)

Đầu ra

Các nút: 10, 20, 30, 40, 50, 60
Tích = 10*20*30*40*50*60 = 720,000,000

Phương pháp tiếp cận

  • Nhập dữ liệu các nút
  • Duyệt tất cả nút từ gốc, đi theo cây con trái/phải
  • Nhân dồn giá trị các nút
  • In kết quả

Thuật toán

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

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

int tichNut(Node* root) {
    if (root == NULL) return 1;
    return root->data * tichNut(root->left) * tichNut(root->right);
}

Ví dụ mã nguồn

#include <iostream>
using namespace std;

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

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

int tichNut(Node* root) {
    if (root == NULL) return 1;
    return root->data * tichNut(root->left) * tichNut(root->right);
}

int main() {
    Node* root = taoNut(10);
    root->left = taoNut(20);
    root->right = taoNut(30);
    root->left->left = taoNut(40);
    root->left->right = taoNut(50);
    root->right->left = taoNut(60);
    root->right->right = taoNut(70);
    
    int tich = tichNut(root);
    cout << "Tích tất cả nút: " << tich << endl;
    return 0;
}

Kết quả chạy chương trình

Tích tất cả nút: 720000000