Professional Documents
Culture Documents
Báo Cáo Bài Tập Lớn Tuần 4 (Binary Tree)
Báo Cáo Bài Tập Lớn Tuần 4 (Binary Tree)
TPHCM
KHOA CÔNG NGHỆ THÔNG TIN
1
void Input_customer(): Cho phép người dùng nhập thông tin khách hàng từ bàn phím
void Output_customer(): Xuất thông tin khách hàng ra màn hình với các thông tin:
oHọ tên
oSố điện thoại
oĐịa chỉ
oNgày sinh: dd/mm/yyyy
void readCustomer(ifstream& filein): Hàm đọc thông tin khách hàng từ file .txt
Node(customer key)
{
this->key = key;
left = nullptr;
right = nullptr;
}
};
typedef Node *link;
link root;
2
- Node(customer key): khởi tạo Node mới với thông tin của khách hàng và gán hai con trỏ =
nullptr
- Xây dựng các hàm xử lí thông tin cây nhị phân:
BST(): hàm khởi tạo cây rỗng (root=nullptr)
void print(link root): nếu cây không phải là cây rỗng, thông tin khách hàng sẽ được ra
theo thứ tự Root – Left – Right (dùng đệ quy)
int compare(customer x, customer y): hàm so sánh số điện thoại của khách hàng, giá trị
trả về mang kiểu int
void insert(link& root, customer key): hàm thêm một Node mới vào cây với thông tin
khách hàng
o Nếu cây rỗng, Node mới thêm là gốc (root)
o Nếu cây khác rỗng, so sánh số điện thoại của khách hàng mới với số điện
thoại của khách hàng ở Node gốc: lớn hơn thì thêm Node mới ở phía cây
con phải, bé hơn thì thêm Node ở phía cây con trái (dùng đệ quy)
link findMin(link root): hàm tìm Node có khóa nhỏ nhất trong cây (khóa ở đây là số
điện thoại của khách hàng)
o Node có khóa nhỏ nhất sẽ nằm bên phía cây con trái của gốc
o Duyệt đến node ngoài cùng nhất của cây con trái
o Khóa của Node có giá trị nhỏ nhất trong cây nhị phân
link deleteNode(link& r, char* dataNumber): hàm xóa Node thông tin khách hàng với số
điện thoại cho trước
o Nếu cây rỗng: không có Node cần xóa
o Nếu cây không rỗng: Tìm Node mang thông tin khách hàng có số điện
thoại cho trước
Trường hợp 1: Node cần xóa không có con (Node lá) => gán Node
= nullptr
Trường hợp 2: Node cần xóa có 1 con
Nếu Node có một cây con trái thì ta thực hiện duyệt sang
trái để cập nhật lại mối liên kết giữa Node cha và Node con
của Node cần xóa
Nếu Node có một cây con phải thì ta thực hiện duyệt sang
phải để cập nhật lại mối liên kết giữa Node cha và Node
con của Node cần xóa.
Sau khi cập nhật xong mối liên kết giữa Node cần xóa với
các Node con và Node cha, thì ta sẽ thực hiện xóa Node đó.
(gán Node=nullptr)
Trường hợp 3: Node cần xóa có 2 con
Tìm Node thế cho Node cần xóa => để đảm bảo cấu trúc:
tìm Node trái nhất (nhỏ nhất) của cây con phải.
3
Cập nhật lại data của Node cần xóa chính là data của Node
thế. Cũng như cập nhật lại mối liên kết cho Node cha của
Node thế và Node con của Node thế.
bool isSameDate(link r): Hàm kiểm tra khách hàng có ngày sinh trùng với ngày hôm
nay:
o Dùng hàm localtime_s(tm* Tm, const time* Time) để lấy ngày, giờ hôm
nay
o So sánh ngày và tháng sinh của khách hàng với ngày tháng của hệ thống
=> trả về giá trị true hoặc false
void printSameDate(link r): Duyệt cây nhị phân và in ra thông tin của các khách hàng
nếu có ngày và tháng sinh trùng với ngày hôm nay (dùng hàm bool isSameDate(link r)
để kiểm tra)
void readFile(ifstream& filein, link& r): đọc thông tin khách hàng từ file và thêm vào cây
nhị phân
* Cuối cùng là xây dựng hàm Menu cho chương trình kiểm thử, gồm các chức năng:
Nhập dữ liệu khách hàng từ bàn phím
Xuất danh sách khách hàng
Thêm một khách hàng vào danh sách
Xóa một khách hàng có số điện thoại cho trước
Thống kê các khách hàng có cùng ngày sinh nhật là ngày hôm nay
Đọc thông tin khách hàng từ file .txt