Định nghĩa Cây nhị phân: là cây mà tại mỗi nút có tối đa 2 con Có một node gọi là gốc root và 2 cây con gọi là cây con trái và cây con phải Giá trị của những nút bên trái nhỏ hơn gi
Trang 2Môi trường làm việc: BORLANDC
Tài liệu tham khảo:
1 Nhập môn cấu trúc dữ liệu và thuật toán
Trang 4Định nghĩa
Cây nhị phân: là cây mà tại mỗi nút có tối đa 2 con
Có một node gọi là gốc (root) và 2 cây con gọi là cây con trái và cây con phải
Giá trị của những nút bên trái nhỏ hơn giá trị của những nút bên phải.
Cây rỗng:
Cây có 1 node: là node gốc
Cây có 2 node:
Trang 5Ví dụ CNP:
2510
3532
5041
Trang 6Khai báo CNP:
typedef struct TagNode
{int info;
Trang 7 Chiều cao của cây
Hủy toàn bộ cây NPTK.
Trang 91.NLR(Tiền thứ tự)
void NLR(TREE T)
{
if(T!=NULL) {
cout<<T->Info<<" ";//thamnut T NLR(T->pLeft);
NLR(T->pRight);
} }
Trang 10Phép duyệt cây_ NLR:
208
2522
2928
20 Kết quả: 8 3 1 5 4 15 9 12 16 26 21 25 22 29 28
Trang 112 NLR(Trung thứ tự)
void LNR(TREE T)
{ if(T!=NULL)
Trang 12Phép duyệt cây_LNR
156
1918
2522
1 Kết quả: 3 4 5 6 7 8 10 13 15 16 18 19 21 22 25
Trang 133.LRN (Hau thu tu)
void LRN(TREE T)
{if(T!=NULL)
Trang 14Ví dụ về phép duyệt cây LRN
158
1816
2926
1 Kết quả: 4 5 3 11 9 13 12 8 16 18 19 26 29 25 15
Trang 15Tìm kiếm trên CNP:
Chọn hướng tìm theo tính chất của CNP:
hơn (hay lớn hơn) khóa của node gốc
tNode *SearchNode(tree T,int X) {
if(T) {
}
Trang 16Giải thuật tìm kiếm trên BST
Algorithm searchNode
Input: T là node gốc và X là khóa cần tìm
Output: node tìm thấy
1 if (cây rỗng)
1.1 return -1 //khong tim thay
2 if (X trùng khóa với T)
2.1 return 1 // tim thay
3 if (X có khóa nhỏ hơn khóa của T)
3.1 Tìm bên nhánh trái của T
4 else
4.1 Tìm bên nhánh phải của T
End searchNode
Trang 17Ví dụ tìm kiếm trên CNP
2510
3532
5041
Tìm kiếm 13
Khác nhauGiống nhauNode gốc nhỏ hơnNode gốc lớn hơn
Tìm thấy Số node duyệt: 5Số lần so sánh: 9
Trang 18Ví dụ tìm kiếm trên CNP
2510
3532
5041
Tìm kiếm 14
Khác nhauNode gốc nhỏ hơnNode gốc lớn hơn
Không tìm thấy Số node duyệt: 5Số lần so sánh: 10
Trang 19Giải thuật thêm vào CNP:
NHẬP: node gốc và dữ liệu cần thêm vào
XUẤT: CNP sau khi thêm vào
1 if (cây rỗng)
1.1 Thêm vào tại vị trí này
2 if (dl trùng khóa với nút gốc)
2.1 return 0
3 if (dl có khóa nhỏ hơn khóa của nút gốc)
3.1 Thêm vào bên nhánh trái của nút gốc
4 else
4.1 Thêm vào bên nhánh phải của nút gốcEnd
Trang 20Giải thuật thêm vào CNP
int InsertNode(tree &T,int gt)
{ y+=1;
} else {
T = GetNode(gt);
return 1;
}
Trang 21Thêm vào CNP:
Trang 22I/ Xóa nút p không là gốc:
1/ p không có con trái hoặc phải:
1 Gán liên kết từ cha của p xuống con duy nhất của p
Trang 232/ p có con trái và con phải
1 Tìm w là node trước node x trên phép duyệt cây trung thứ
tự (chính là node cực phải của cây con bên trái của x)
2 Thay x bằng w
3 Xóa node w cũ (giống trường hợp 1 hoặc 2 đã xét)
Trang 252/ T không có con trái hoặc con phải(xóa tương
tự như trường hợp I/.1)
3/ T có con trái và con phải(xóa tương tự
trường hợp I/.2)
Trang 27Cây cân bằng chiều cao - AVL
ĐN cây AVL:
chênh nhau không quá 1.
Ký hiệu cho mỗi node của cây AVL:
Trang 28Khai báo cây AVL
Trang 29 Các thao tác:
Nhập xuất cây.
Thêm phần tử X trong cây.
Tìm phần tử X trong cây.
Hủy phần tử X trong cây.
Hủy toàn bộ cây AVL
Lưu ý: mỗi thao tác thêm hay xóa,nếu cây bị mất
cân bằng,ta phải cân bằng lại cây.
Trang 30Ví dụ cây AVL
Cây AVL
Không phải cây AVL
Trang 31Thêm 1 phần tử trên cây AVL
Int insertNode(AVLTree & T, int x)
Trang 32Các trạng thái khi thêm vào
–
\
/
–
Thêm vào bên phải và
làm bên phải cao lên
Thêm vào bên phải và làm bên phải cao lên
\
Thêm vào bên phải và làm bên phải cao lên
\\
Trang 33Cân bằng cây AVL – Quay đơn
Trang 34Ví dụ thêm vào cây AVL
(1)
\\
\ –
Trang 35Ví dụ 2 thêm vào cây AVL (tt.)
\\
\ –
Trang 36void rotateLL(AVLTree &T)
{AVLNode* T1=T->pLeft;
T->pLeft=T1->pRight;
T1->pRight=T;
switch(T1->bal)
{case LH:
T->bal=EH;T1->bal=EH;break;case EH:
T->bal=LH;T1->bal=RH;break;}
T=T1;
Trang 37//Quay kep Left-Right void rotateLR(AVLTree &T) { AVLNode* T1=T->pLeft;
AVLNode* T2=T->pRight; T->pLeft=T2->pRight;
T->bal=EH; T1->bal=EH; break; case RH:
T->bal=EH; T1->bal=LH; break; }
T2->bal=EH;
T=T2;}
Trang 38Xóa:Các trạng thái khi xóa node
Trang 39Các trạng thái khi xóa node (tt.)
Trang 40Các trạng thái khi xóa node (tt.)
Trang 41Ví dụ xóa node của cây AVL
Trang 42Ví dụ xóa node của cây AVL (tt.)