You are on page 1of 2

THỰC HÀNH CTDL&GT BUỔI SỐ 4

MỤC TIÊU
1) Cây nhị phân là gì ? Tính chất và một số ứng dụng của cây? Tại sao phải dùng cây
nhị phân để lưu trữ ?
2) Viết chương trình cài đặt các thao tác cơ bản trên cây nhị phân ?
3) Cây nhị phân tìm kiếm cân bằng (hướng dẫn làm bài tập)
NỘI DUNG LÝ THUYẾT

BÀI TẬP THỰC HÀNH


Bài tập 1: Tạo một cây nhị phân tìm kiếm, trong đó trường Key tại mỗi nút là một số
nguyên dương. Hãy viết hàm thực hiện các thao tác sau:
a) In cây nhị phân tìm kiếm nói trên theo các thứ tự : LNR, LRN, NLR, NRL, RNL, RLN.
b) Tìm một nút có khoá bằng X trên cây.
c) Xoá 1 nút có khoá bằng X là số nguyên tố trên cây.
d) Đếm số nút trong cây.
e) Đếm số nút có đầy đủ 2 cây con
f) Đến số nút lá.
g) Tính chiều cao của cây
h) Vẽ cây nhị phân tìm kiếm ra màn hình (khuyến khích)

1
Bài tập 2: Giả sử cho thông tin một sinh viên bao gồm các thông tin:
- Mã sinh viên: dạng số nguyên dương, mã sinh viên là giá trị duy nhất để phân biệt
- Họ tên sinh viên: dạng chuỗi
- Điểm trung bình học tập: dạng số thực, có miền giá trị từ 0.0 đến 10.0
Hãy thực hiện các yêu cầu sau:
a) Khai báo cấu trúc cây nhị phân tìm kiếm để lưu thông tin sinh viên theo mô tả ở trên.
b) Viết hàm thêm các sinh viên vào cây.
c) Viết hàm tìm một sinh viên trên cây (tìm mã số hoặc tìm theo tên)
d) Viết hàm xóa các sinh viên có điểm trung bình là 5.0 ra khỏi cây.
e) Viết hàm hiển thị danh sách sinh viên khi duyệt cây theo điểm trung bình giảm dần.
f) Viết hàm tính chiều cao của cây và tính số bậc của node.
Bài tập 3: Xét cấu trúc dữ liệu định nghĩa cây nhị phân:
struct Tnode
{
int key; // dữ liệu của nút
struct Tnode *left;
struct Tnode *right;
};
typedef struct Tnode treeNode;
Hãy thực hiện các yêu cầu sau:
a) Viết hàm int countLeaft (treeNode *Root, int k) trả lại số lượng lá của cây.
b) Viết hàm int OddSum (treeNode *Root) trả lại tổng các số lẻ được lưu tại các nút của
cây nhị phân.
c) Viết hàm int Sum (treeNode *Root) trả lại giá trị là tổng của các giá trị số lưu tại các
nút của cây nhị phân.
d) Viết hàm int EvenLeaf (treeNode *Root) trả lại số lượng nút lá với trường dữ liệu key
của nút là số chẵn của cây.
e) Viết hàm int countNodes (treeNode *Root, int k) trả lại số nút có trường key lớn hơn
k trong cây.

You might also like