2. N I DUNGộ
1. Các khái ni mệ
2. Đ c đi mặ ể
3. Hình d ngạ
4. Các khái ni mệ
5. Đ nh nghĩa ki u d li uị ể ữ ệ
6. Các l u ý khi cài đ tư ặ
7. Các thao tác
2
3. CÁC KHÁI NI Mệ
Bậc của một nút: là số cây con
của nút đó.
Nút g c: là nút không có nútố
cha.
Nút lá: là nút có b c b ng 0.ậ ằ
Nút nhánh: là nút có b cậ
khác 0 và không ph i là g c.ả ố
2
22
110
0
0
0
3
4. Mức 3
Mức 2
Mức 1
Mức 0
CÁC KHÁI NI M (TT)ệ
Đ dài đ ng đi t g cộ ườ ừ ố
đ n nút x: là s nhánhế ố
c n đi qua k t g cầ ể ừ ố
đ n x.ế
Đ cao c a cây: Đ dàiộ ủ ộ
đ ng đi t g c đ nườ ừ ố ế
nút lá m c th p nh t.ở ứ ấ ấ
4
5. Đ C ĐI M CÂ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ả ấ ủ
7777
33 3636
11 66 1515 4040
232344
5
6. Nút
Đ NH NGHĨA KI U D LI Uị ể ữ ệ
typedef struct TNODE
{
<Data> Key;
struct TNODE *pLeft,
*pRight;
Giá trị
Trỏ trái Trỏ phải
TNODE
Key
pLeft pRight
6
7. VÍ D KHAI BÁO CÂY NHụ ị
PHÂN BI U DI N CÁC NODEể ễ
LÀ S NGUYÊNố
typedef struct TNODE
{
int Key;
struct TNODE *pLeft, *pRight;
} *TREE;
7
8. CÁC L U Ý KHI CÀI Đ TƯ ặ
Bước 1: Khai báo kiễu dữ liệu biểu diễn cây
Bước 2: Xây dựng hàm đưa dữ liệu (nhập) vào cây
Bước 3: Xây dựng các thao tác duyệt, tìm kiếm, huỷ, …
Các lưu ý khác:
1. Trước khi tạo node mới phải xin cấp phát vùng nhớ.
2. Trước khi tạo cây mới phải khởi tạo cây rỗng.
3. Trước khi kết thúc chương trình phải huỷ cây (giải phóng
vùng nhớ).
8
9. C 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
9
10. CÁC THAO TÁC
1. Xây d ng câyự
2. Duy t câyệ
3. Cho bi t các thông tin c a câyế ủ
4. Tìm ki mế
5. Xoá node trên cây
10
11. CÁC THAO TÁC
1. Xây d ng câyự
2. Duy t câyệ
3. Cho bi t các thông tin c a câyế ủ
4. Tìm ki mế
5. Xoá node trên cây
11
12. 40401515446611363633
XÂY D NG CÂYự
77 3636 33 11 66 44 1515 4040
7777 Nếu node cầnNếu node cần
thêmthêm << node đangnode đang
xét thì thêm vềxét thì thêm về
bên tráibên trái..
Ngược lại thì thêmNgược lại thì thêm
vềvề bên phảibên phải..
12
18. NLR
T i node t đang xét, n uạ ế
khác r ng thìỗ
. In giá tr c a tị ủ
. Duy t cây con bên tráiệ
c a t theo th t NLRủ ứ ự
. Duy t cây con bên ph iệ ả
c a t theo th t NLRủ ứ ự
void NLR (TREE t)void NLR (TREE t)
{{
if(t!=NULL)if(t!=NULL)
{{
cout<<t->Key<<“t”;cout<<t->Key<<“t”;
NLR(t->pLeft);NLR(t->pLeft);
NLR(t->pRight);NLR(t->pRight);
}}
}}
18
19. BÀI T PẬ
Bài 1
Hãy xây d ng cây nh phân tìm ki m theo th t nh p sau:ự ị ế ứ ự ậ
27 19 10 21 35 25 41 12 46 7
Hãy duy t cây trên theo th t tr cệ ứ ự ướ
Bài 2
Hãy xây d ng cây nh phân tìm ki m theo th t nh p sau:ự ị ế ứ ự ậ
H B C A E D Z M P T
Hãy duy t cây trên theo th t tr cệ ứ ự ướ
Bài 3
Hãy xây d ng cây nh phân tìm ki m theo th t nh p sau:ự ị ế ứ ự ậ
Hu Đà N ngế ẵ Hà N iộ Vĩnh Long C n Th Sócầ ơ
Trăng Nha Trang Đ ng Naiồ Vũng Tàu An Giang
Ti n Giangề Bình D ngươ H i D ngả ươ
19
21. LNR
T i node t đang xét, n uạ ế
khác r ng thìỗ
. Duy t cây con bên tráiệ
c a t theo th t LNRủ ứ ự
. In giá tr c a tị ủ
. Duy t cây con bên ph iệ ả
c a t theo th t LNRủ ứ ự
void LNR (TREE t)
{
if(t!=NULL)
{
LNR(t->pLeft);
cout<<t->Key<<“ “;
LNR(t->pRight);
}
}
21
23. LRN
T i node t đang xét, n uạ ế
khác r ng thìỗ
. Duy t cây con bên tráiệ
c a t theo th t LRNủ ứ ự
. Duy t cây con bên ph iệ ả
c a t theo th t LRNủ ứ ự
. In giá tr c a tị ủ
void LRN (TREE t)
{
if(t!=NULL)
{
LRN(t->pLeft);
LRN(t->pRight);
cout<<t->Key<<“ “;
}
}
23
24. BÀI T PẬ
Bài 4
Hãy xây d ng cây nh phân tìm ki m theo thự ị ế ứ
t nh p sau:ự ậ
27 19 10 21 3 15 41 50 30 27
Hãy duy t cây trên theo th t gi aệ ứ ự ữ
Bài 5
Hãy xây d ng cây nh phân tìm ki m theo thự ị ế ứ
t nh p sau:ự ậ
H B C A E D T M X O
Hãy duy t cây trên theo th t sauệ ứ ự
24
25. V N Đ C N QUAN TÂMấ ề ầ
Xây d ng cây t k t qu duy t theo th t tr cự ừ ế ả ệ ứ ự ướ
(NLR)
Ch n giá trọ ị đ u tiên làm node g cầ ố .
L n l t đ a các giá tr còn l iầ ượ ư ị ạ t tráiừ
sang ph iả vào cây theo nguyên t c xâyắ
d ng cây.ự
Xây d ng cây t k t qu duy t theo th t sauự ừ ế ả ệ ứ ự
(LRN)
Ch n giá trọ ị cu i cùng làm node g cố ố .
L n l t đ a các giá tr còn l iầ ượ ư ị ạ t ph iừ ả
sang trái vào cây theo nguyên t c xâyắ
d ng cây.ự
25
26. V N Đ C N QUAN TÂM (TT)ấ ề ầ
Xây d ng cây t k t qu duy t theo th t gi aự ừ ế ả ệ ứ ự ữ
(LNR)
G i r: S l ng giá tr cho tr c.ọ ố ượ ị ướ
G i m = r div 2: Giá tr gi a.ọ ị ở ữ
Ch n giá tr th m làm node g c.ọ ị ứ ố
L n l t đ a các giá tr b t đ u t v trí m-1ầ ượ ư ị ắ ầ ừ ị
lùi v trái vào cây theo nguyên t c xây d ngề ắ ự
cây.
L n l t đ a các giá tr b t đ u t v trí m+1ầ ượ ư ị ắ ầ ừ ị
đ n cu i vào cây theo nguyên t c xây d ng cây.ế ố ắ ự
26
27. BÀI T PẬ
Bài 6
Hãy v cây nh phân tìm ki m T bi tẽ ị ế ế
r ng khi duy t cây T theo th t Left-ằ ệ ứ ự
Right-Node thì đ c dãy sau: 1, 4, 7, 5,ượ
3, 16, 18, 15, 29, 25, 30, 20, 8.
Hãy duy t cây T trên theo th t Node-ệ ứ ự
Left-Right.
Cây T có chi u cao là bao nhiêu? Tìm cácề
đ ng đi t g c có đ dài là 4 trên câyườ ừ ố ộ 27
28. BÀI T PẬ
Bài 7
Hãy v cây nh phân tìm ki m T bi tẽ ị ế ế
r ng khi duy t cây T theo th t Node-ằ ệ ứ ự
Left-Right thì đ c dãy sau: 9, 4, 1, 3, 8,ượ
6, 5, 7, 10, 14, 12, 13, 16, 19.
Hãy duy t cây T trên theo th t Left-ệ ứ ự
Right-Node.
Li t kê các nút lá c a cây. Li t kê cácệ ủ ệ
nút nhánh c a cây.ủ
28
29. CÀI Đ TẶ
void Nhap(TREE &t)
{
int x;
do{
cout<<“Nhap gia tri: “;
cin>>x;
int kq=ThemNut(t, x);
if(kq==0||kq==-1)
break;
}while (true);
}
29
30. CÀI Đ TẶ
void main()
{
TREE t;
t=NULL;
Nhap(t);
cout<<“Duyet cay theo thu tu giua: “;
LNR(t);
Huy(t);
}
30
31. CÁC THAO TÁC
1. Xây d ng câyự
2. Duy t câyệ
3. Cho bi t các thông tin c a câyế ủ
4. Tìm ki mế
5. Xoá node trên cây
31
32. CÁC THAO TÁC
1. Xây d ng câyự
2. Duy t câyệ
3. Cho bi t các thông tin c a câyế ủ
4. Tìm ki mế
5. Xoá node trên cây
32
33. CHO BI T CÁC THÔNG TIN C A CÂYế ủ
1. S node lá (node b c 0)ố ậ
2. S node có 1 cây con (node b c 1)ố ậ
3. S node ch có 1 cây con ph iố ỉ ả
4. S node có 1 cây con tráiố
5. S node 2 cây con (node b c 2)ố ậ
6. Đ cao c a câyộ ủ
7. S node c a câyố ủ
8. Các node trên t ng m c c a câyừ ứ ủ
9. Đ dài đ ng đi t g c đ n node xộ ườ ừ ố ế 33
34. S NODE LÁố
N u node t khác r ng thìế ỗ
. N u node t có b c 0 thìế ậ
Tr v 1ả ề
. Ng c l iượ ạ
Tr v S node lá cây trái tả ề ố
+ S node lá cây ph i tố ả
N u node t r ng thìế ỗ
Tr v 0ả ề
34
35. S NODE LÁ (TT)ố
int DemNutLa (TREE t)
{
if(t)
{
if(t->pLeft==NULL && t->pRight==NULL)
return 1;
else
return DemNutLa(t->pLeft)+DemNutLa(t->pRight);
}
else
return 0;
}
35
36. S NODE CÓ 1 CÂY CONố
N u node t khác r ng thìế ỗ
d=S node b c 1 c a cây trái tố ậ ủ
+ S node b c 1 c a cây ph i tố ậ ủ ả
N u node t có b c 1 thì tr v d+1ế ậ ả ề
Ng c l i tr v dượ ạ ả ề
N u node t r ng thìế ỗ
Tr v 0ả ề
36
37. S NODE CÓ 1 CÂY CONố
int DemNut1Con(TREE t)
{
if(t)
{
int d=DemNut1Con(t->pLeft)+DemNut1Con(t->pRight);
if((t->pLeft!=NULL&&t->pRight==NULL)
||(t->pLeft==NULL&&t->pRight!=NULL))
return d+1;
else
return d;
}
else
return 0;
}
37
38. S NODE CH CÓ 1 CÂY CON PH Iố ỉ ả
N u node t khác r ng thìế ỗ
d = S node ch có 1 cây con ph i c a cây con trái tố ỉ ả ủ
+ S node ch có 1 cây con ph i c a cây con ph i tố ỉ ả ủ ả
N u node t ch có 1 cây con ph i thì tr v d+1ế ỉ ả ả ề
Ng c l i tr v dượ ạ ả ề
N u node t r ng thìế ỗ
Tr v 0ả ề
38
39. S NODE CÓ 1 CÂY CON PH Iố ả
int DemNut1ConPhai(TREE t)
{
if(t)
{
int d=DemNut1ConPhai(t->pLeft)
+DemNut1ConPhai(t->pRight);
if(t->pLeft==NULL && t->pRight!=NULL)
return d+1;
else
return d;
}
else
return 0;
}
39
62. XÓA NODE 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ấ ủ
Xóa 36 (Cách 2)
7777
33 3636
11 66 1515 4040
232344
1616
2323
62
65. HU TOÀN B CÂYỷ ộ
N u node khác r ngế ỗ
H y cây bên trái tủ
H y cây bên ph i tủ ả
H y node tủ
65
66. Cho dãy s theo th t nh p t trái sangố ứ ự ậ ừ
ph i nh sau:ả ư 20 15 35 30
11 13 17 36 47 16 38 28 14
Hãy v cây nh phân tìm ki m cho dãyẽ ị ế
s trên.ố
Hãy cho bi t k t qu duy t cây trênế ế ả ệ
theo th t tr c, gi a và sau.ứ ự ướ ữ
Cho bi t đ cao c a cây, các nút lá, cácế ộ ủ
nút có b c 2.ậ
V l i cây sau khi thêm nút: 25 và 91ẽ ạ
Trình bày t ng b c và v l i cây sauừ ướ ẽ ạ
khi l n l t xoá các nút:ầ ượ 11 và 35
66