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.

Đầ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