You are on page 1of 34

TRƯỜNG ĐẠI HỌC MỞ HÀ NỘI

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP LỚN


MÔN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

ĐỀ TÀI
“CÀI ĐẶT CÂY NHỊ PHÂN TÌM KIẾM VỚI CÁC THAO TÁC
TRÊN CÂY”

Giảng viên hướng dẫn: ThS.Nguyễn Thị Tâm


Sinh viên thực hiện: Hoàng Quốc Khánh – 2010A04
Trần Thanh Tâm – 2010A03
Bùi Tuấn Anh – 2010A02
Lê Tuấn Sơn – 1810A03

Hà Nội, 2021
MỤC LỤC
I. XÁC ĐỊNH BÀI TOÁN.....................................................................................................................3
II. CẤU TRÚC DỮ LIỆU TỔ CHỨC CHO BÀI TOÁN..................................................................4
- Input:...............................................................................................................................................4
- Output:............................................................................................................................................4
III. CÁC THUẬT TOÁN......................................................................................................................4
1. Thêm một node vào cây..................................................................................................................4
2. Duyệt cây LNR................................................................................................................................4
3. Duyệt cây theo RNL.......................................................................................................................5
4. Tìm node trên cây...........................................................................................................................5
5. Xóa node trên cây...........................................................................................................................6
6. Sửa thông tin một node trên cây....................................................................................................6
7. Tính tổng lương (hoặc tổng hệ số lương)......................................................................................7
8. Đếm số phần tử trên cây................................................................................................................7
9. Tính độ cao cây...............................................................................................................................7
IV. LẬP TRÌNH – CÀI ĐẶT...............................................................................................................8
- Thêm một node vào cây..................................................................................................................8
- Duyệt RNL và LNR........................................................................................................................8
- Tìm kiếm một node.........................................................................................................................8
- Xóa một node..................................................................................................................................9
- Sửa thông tin một node..................................................................................................................9
- Tổng lương....................................................................................................................................10
- Độ cao cây.....................................................................................................................................10
- Số node trên cây............................................................................................................................10
V. KIỂM THỬ.......................................................................................................................................10
*Quá trình lương (Hoàng Quốc Khánh).............................................................................................10
*Chức vụ (Bùi Tuấn Anh)....................................................................................................................16
*Nhân viên (Lê Tuấn Sơn)...................................................................................................................23
*Phòng ban (Trần Thanh Tâm)..........................................................................................................28
Link src code.........................................................................................................................................33

1
HỌ VÀ TÊN CÔNG VIỆC GHI CHÚ
Hoàng Quốc Khánh Cài đặt với Quá trình lương
Trần Thanh Tâm Cài đặt với Phòng ban
Bùi Tuấn Anh Cài đặt với Chức vụ
Lê Tuấn Sơn Cài đặt với Nhân viên
BẢNG PHÂN CÔNG CÔNG VIỆC

2
I. XÁC ĐỊNH BÀI TOÁN
Chọn một bài toán xác định: quản lý lương của doanh nghiệp.
Xác định 4 đối tượng cần quản lý (mỗi người cài đặt 1 đối tượng khác nhau):

Các chức năng cần có:

3
II. CẤU TRÚC DỮ LIỆU TỔ CHỨC CHO BÀI TOÁN
Cấu trúc: Cây tìm kiếm nhị phân
- Input:
o Nhập danh sách của các đối tượng (node)
o Thông tin của node cần thêm
o Mã đối tượng cần tìm
o Mã đối tượng cần xóa
o Mã của đối tượng cần sửa
- Output:
o Hiện danh sách các đối tượng
o Tổng lương (hoặc tổng hệ số lương) của các đối tượng
o Số lượng phần tử trên cây
o Độ cao của cây
III. CÁC THUẬT TOÁN
1. Thêm một node vào cây

2. Duyệt cây LNR

4
3. Duyệt cây theo RNL

4. Tìm node trên cây

5
5. Xóa node trên cây

6. Sửa thông tin một node trên cây

6
7. Tính tổng lương (hoặc tổng hệ số lương)

8. Đếm số phần tử trên cây

9. Tính độ cao cây

7
IV. LẬP TRÌNH – CÀI ĐẶT
- Thêm một node vào cây
void insert_Node(Tree &root, Data data){
if(root != NULL){
if(root->infor.ma == data.ma) return;
if(root->infor.ma < data.ma)
insert_Node(root->right,data);
else
insert_Node(root->left,data);
}
else{
root = new Node;
root->infor = data;
root->left = NULL;
root->right = NULL;
}
}
- Duyệt RNL và LNR
void RNL(Tree root){
if(root != NULL){
RNL(root->right);
hien_1(root->infor);
RNL(root->left);
}
}

void LNR(Tree root){


if(root != NULL){
LNR(root->left);
hien_1(root->infor);
LNR(root->right);
}
}
- Tìm kiếm một node
Node *tim_kiem_X(Tree root, int x){
Node *p = root;
while(p != NULL){
if(p->infor.ma == x){
return p;
}else {
if(p->infor.ma > x){
p = p->left;
}
else if(p->infor.ma < x){
p = p->right;
}
}
}
return NULL;
8
}
- Xóa một node
void xoa_Node_Y(Tree &root, int y){ //XÓA MỘT NODE TRÊN CÂY
if(root == NULL){
return;
}else {
if(root->infor.ma > y){
xoa_Node_Y(root->left,y);
}else if(root->infor.ma < y){
xoa_Node_Y(root->right,y);
}else {
Node *X = root; // node thế mạng(bị xóa)
if(root->left == NULL){ // TH1: cây có một con phải
root = root->right;
}else if(root->right == NULL){ // TH2: cây có một con
trái
root = root->left;
}else{ // TH3: cây có một con trái và một con phải
Node *Y = root->right; // biến Y đảm nhận nhiệm
vụ tìm ra node thế mạng
tim_node_the_mang(X,Y);
}
delete X;
cout << "\nXOA THANH CONG!\n" << endl;
}
}
}
void tim_node_the_mang(Tree &X, Tree &Y){
if(Y->left != NULL){
tim_node_the_mang(X,Y->left);
}else {
X->infor = Y->infor; // infor node X = infor node thế
mạng
X = Y; // biến X trỏ đến node thế mạng
Y = Y->right; // cập nhật lại mối liên kết
}
}
- Sửa thông tin một node
void sua_thong_tin (Tree &root,Data data){
int x;
cout << "Nhap ma: ";
cin >> x;
Node *p = tim_kiem_X(root,x);
if(p != NULL){
nhap(data);
p->infor = data;
}
}
- Tổng lương
9
void tong_luong (Tree root, float &tong_luong){
if(root != NULL){
tong_luong = tong_luong + root->infor.luong;
tong_luong (root->left,tong_luong);
tong_luong (root->right,tong_luong);
}
}
- Độ cao cây
int do_cao_cay(Tree root){
if(root != NULL){
int t1 = do_cao_cay(root->left);
int t2 = do_cao_cay(root->right);
if(t1 > t2){
return t1 + 1;
}else {
return t2 + 1;
}
}
else return 0;
}
- Số node trên cây
void dem_so_node(Tree root,int &dem){
if(root != NULL){
dem_so_node(root->left,dem);
dem_so_node(root->right,dem);
dem++;
}
}
V. KIỂM THỬ
*Quá trình lương (Hoàng Quốc Khánh)

10
11
12
13
14
15
*Chức vụ (Bùi Tuấn Anh)

16
17
18
19
20
21
22
*Nhân viên (Lê Tuấn Sơn)

23
24
25
26
27
*Phòng ban (Trần Thanh Tâm)

28
29
30
31
32
Link src code: https://drive.google.com/drive/folders/1t-
BDdWHNSZbGtOTcVi0_y93qvgL9_BWn?usp=sharing

33

You might also like