Professional Documents
Culture Documents
struct Fraction {
int numerator; // tử số
};
struct TreeNode {
};
Sau đó, chúng ta có thể sử dụng các hàm sau để giải quyết các câu hỏi:
if (b == 0) {
return a;
f->numerator /= g;
f->denominator /= g;
if (root == NULL) {
return;
listReducedFractions(root->left);
reduceFraction(&(root->value));
listReducedFractions(root->right);
Hàm gcd là hàm tìm ước chung lớn nhất của hai số nguyên. Hàm reduceFraction là hàm rút gọn phân số.
Hàm listReducedFractions sẽ duyệt cây theo thứ tự trung tố và rút gọn phân số của mỗi nút trước khi in
ra giá trị của nó.
int isPrime(int n) {
if (n <= 1) {
return 0;
if (n % i == 0) {
return 0;
return 1;
if (root == NULL) {
return;
findFractionWithPrimeNumerator(root->left, result);
if (isPrime(root->value.numerator)) {
*result = root->value;
return;
findFractionWithPrimeNumerator(root->right, result);
Hàm isPrime là hàm kiểm tra một số nguyên có phải là số nguyên tố hay không. Hàm
findFractionWithPrimeNumerator sẽ duyệt cây theo thứ tự trung tố và tìm phân số đầu tiên mà có tử là
số nguyên tố. Nếu tìm thấy, nó sẽ lưu giá trị của phân số đó vào biến result.
if (root == NULL) {
return 0;
return 1;
Hàm countLeaves sẽ đệ quy đếm số lượng nút lá của cây. Nếu nút hiện tại là nút lá, nó sẽ trả về 1. Nếu
không, nó sẽ đệ quy đếm số lượng nút lá của cây con trái và cây con phải và trả về tổng của hai giá trị đó.
if (root == NULL) {
return root;
} else {
if (root->left == NULL) {
struct TreeNode* temp = root->right;
free(root);
return temp;
free(root);
return temp;
root->value = temp->value;
return root;
Hàm deleteNode là hàm xóa một nút khỏi cây. Hàm findMin là hàm tìm giá trị nhỏ nhất trong cây con
phải của nút hiện tại. Hàm deleteFractionsWithOddNumerator sẽ xóa các nút mà có tử là số lẻ bằng
cách gọi hàm deleteNode với giá trị phân số key được thiết lập là (1, 1) (vì mẫu số luôn là số dương nên
1/1 sẽ không bao giờ xuất hiện trong cây).
if (root == NULL) {
return;
sumFractionsLessThanThree(root->left, sum);
if (isLessThanThree(&(root->value)))
sumFractionsLessThanThree(root->right, sum);
Hàm `isLessThanThree` sẽ trả về 1 nếu phân số được truyền vào có giá trị nhỏ hơn 3 và trả về 0 nếu
ngược lại. Hàm `sumFractionsLessThanThree` sẽ đệ quy duyệt cây và tính tổng các phân số có giá trị nhỏ
hơn 3. Nếu nút hiện tại có giá trị nhỏ hơn 3, hàm sẽ cộng giá trị phân số của nút đó vào biến tổng.
Câu 6: Tạo cây nhị phân tìm kiếm mới từ các phân số trong cây ban đầu mà có giá trị tử số và mẫu số
đều là số nguyên tố
int isPrime(int n) {
if (n <= 1) {
return 0;
if (n % i == 0) {
return 0;
return 1;
createNewTreeHelper(root, &newRoot);
return newRoot;
}
if (root == NULL) {
return;
createNewTreeHelper(root->left, newRoot);
createNewTreeHelper(root->right, newRoot);
Hàm isPrime sẽ kiểm tra xem một số có phải là số nguyên tố hay không. Hàm createNewTree sẽ tạo một
cây nhị phân tìm kiếm mới từ cây ban đầu và trả về nút gốc của cây mới. Hàm createNewTreeHelper sẽ
đệ quy duyệt cây ban đầu và chèn các phân số có giá trị tử số và mẫu số đều là số nguyên tố vào cây mới
bằng cách gọi hàm insert.