HỌ TÊN NGUYỄN XUÂN TRỰC MSSV 1513804 =========================o0o========================= Sử dụng cây BST để thao tác trên tập dữ liệu các nhân viên 1) Bước 1 Xây dựng một cấu trúc (struct) NhanVien[.]
Trang 1HỌ TÊN : NGUYỄN XUÂN TRỰC
=========================o0o=========================
Sử dụng cây BST để thao tác trên tập dữ liệu các nhân viên.
1) Bước 1: Xây dựng một cấu trúc (struct) NhanVien để lưu trữ các thông tin của
Nhân viên, mỗi nhân viên phân biệt bằng mã nhân viên (maNV)
2) Bước 2: Xây dựng class Node
class Node {
public :
NhanVien nhanVien; // Thô ng tin của nhân viên
Node *pLeft;; // Con trỏ trỏ đến Nút bên trái
Node *pRight; // Con trỏ trỏ đến Nút bên phải
public :
Node() {}
Node( NhanVien nv ) { // Phương thức khời tạo một Node
this ->nhanVien = nv ;
this ->pLeft; = nullptr ;
this ->pRight = nullptr ; }
};
3) Bước 3: Xây dựng cây BST và các phương thức
Bước 3.1: Xây dựng Lớp cây:
class BST {
private :
Node *root; // Con trỏ nút gốc
};
Bước 3.2: Khởi tạo cây rỗng:
BST() {
this ->root = nullptr ; }
Trang 2Bước 3.3: Thêm nhân viên vào cây BST (Giải thuật Đệ quy)
Gọi nút cần thêm vào là pNew
Thêm NhanVien vào cây BST gồm 3 bước, bắt đầu tử root là nút gốc:
B1: Nếu root == NULL, thì gán gốc root == pNew Kết thúc thêm vào
B2: Nếu root->maNV == pNew->maNV, mã Nhân viên bị trùng, báo lỗi và kết thúc thêm vào
B3: Nếu pNew->maNV < root->maNV, thì thêm pNew vào cây con trái của root Ngược lại, thêm pNew vào cây con phải của root
Lặp lại bước 1.
Bước 3.4: Update nhân viên (Giải thuật Đệ quy)
Gọi nút cần update là pNode
Update NhanVien trong cây BST gồm 3 bước, bắt đầu từ root là nút gốc
B1: Nếu root == NULL thì không tìm thấy pNode
Nếu root->maNV == pNode->maNV thì thực hiện cập nhật giới tính của Nhân viên (root->gender = “Nam”) Kết thúc Update
B2: Nếu root->maNV < pNode->maNV thì tìm pNode trong cây con trái của root Ngược lại tìm pNode trong cây con phải của root
Lặp lại bước 1.
Bước 3.5: Tính sai biệt về số nhân viên nữ và nam có maNV < k (Đệ quy)
Thực hiện duyệt cây theo phương pháp Trung thứ tự (Left – Node – Right) để đếm sự sai biệt về số nhân viên Nam và Nữ có maNV < k
B1: Khởi tạo 2 bến đếm
int demNam = 0;
int demNu = 0;
B2: Nếu root == NULL thì trả về Findiff = 0
B3: Duyệt cây con trái
Nếu root->maNV <k && root->gender== “Nu”: demNu++; Nếu root->maNV <k && root->gender== “Nam”: demNam++; Duyệt cây con pha'i
Trang 3B4: Tính sai biệt
Findiff = demNu - demNam