Cấu trúc dữ liệu và giải thuật, cây nhị phân
Trang 1CÂY NHỊ PHÂN
NHÓM 4
Trang 3• Là tập hợp hữu hạn các
nút, trong đó có 1 nút đặc biệt là gốc
• Giữa các nút có quan hệ
phân cấp “cha-con”
Trang 41 1
0
0
0
0
Trang 5KHÁI NIỆM
• Mức của cây: người
ta quy ước nút gốc có mức là 1, nếu nút cha
có mức i thì nút con
có mức i+1.
• Độ cao của cây:là
mức cao nhất của các nút trong cây
Mức 4
Mức 3
Mức 2
Mức 1
Trang 6CÂY NHỊ PHÂN
• Mọi nút trên cây nhị phân
chỉ có tối đa hai cây con
• Đối với cây con của một
nút người ta cũng phân
biệt cây con trái và cây
con phải
Trang 7CÂY NHỊ PHÂN TÌM KIẾM
• Là cây nhị phân
• Giá trị của một node bất kỳ
luôn lớn hơn giá trị của tất
cả các node bên trái và nhỏ hơn giá trị tất cả các node bên phải
Nút có giá trị nhỏ nhất nằm
ở trái nhất của cây
Nút có giá trị lớn nhất nằm ở phải nhất của cây
36 7
6
3
48
Trang 10CẤU TRÚC CHƯƠNG TRÌNH
Khai báo cấu trúc cây Khởi tạo cây rỗng Xây dựng cây Các thao tác Hủy cây begin
end
Trang 12TẠO CÂY
12
40 136 3
nhỏ hơn node đang
trái
về bên phải
Trang 15DUYỆT CÂY
Thứ tự trước (NLR)
Thứ tự giữa (LNR)
Trang 16DUYÊT TRƯỚC (NLR)
void NLR (TREE t) {
if(t!=NULL) {
frintf(“%d”, T->key); NLR(t->pLeft);
NLR(t->pRight);
} }
Tại node t đang xét, nếu
Trang 17Kết quả 7, 3, 1, 6, 4, 36, 15, 23, 40
Trang 18DUYỆT GIỮA (LNR)
void LNR (TREE t) {
if(t!=NULL) {
LNR(t->pLeft);
printf(“%d,T->key”); LNR(t->pRight); }
Trang 19Kết quả 1, 3, 4, 6, 7, 15, 23, 36, 40
Trang 20DUYỆT SAU (LRN)
void LRN (TREE t) {
if(t!=NULL) {
LRN(t->pLeft);
LRN(t->pRight); cout<<t->Key<<“ “; }
Trang 21Kết quả 1, ,4, 6, 3, 23, 15, 40, 36, 7
Trang 23XÓA NODE
1 Node lá
2 Node có 1 cây con
3 Node có 2 cây con
Trang 24XÓA NODE LÁ
Xóa 1 Xóa 23
Trang 25XÓA NODE CÓ 1 CÂY CON
Xóa 6 Xóa 15
4 23
Trang 26XÓA NUDE CÓ 2 CÂY CON
Tìm node thế mạng
• Cách 1: Tìm node trái nhất của cây con phải
• Cách 2: Tìm node phải nhất của cây con trái
16
23
Trang 27NHÓM 4
Ngô Việt Hoàng
Đinh Thanh Lương Hàn Đức Vũ
Phạm Thành Đồng