Professional Documents
Culture Documents
Chương 3: Kiến thức cần thiết khi tìm hiểu về CÂY NHỊ
Chương 3: Kiến thức cần thiết khi tìm hiểu về CÂY NHỊ
Chương 3
CÂY
Mở đầu
Kiến thức cần thiết khi tìm hiểu về CÂY NHỊ
PHÂN TÌM KIẾM:
- Các CTDL cơ bản, các phương pháp cơ
bản về xếp thứ tự và tìm kiếm trên LIST.
- Kiểu dữ liệu cơ bản, dữ liệu lưu trữ trong
máy tính.
- Các kiến thức về cơ sở lập trình & kỹ thuật
lập trình.
Kỹ năng cần có:
- Có thể sử dụng Visual Studio 2010
- Có thể lập trình C++
1
11/07/2020
Cung cấp các khái niệm về cây, kiến thức cấu trúc cây
nhi phân, các thuật toán trên cây nhị phân tìm kiếm.
Rèn luyện và nâng cao kỹ năng lập rình, ứng dụng
cấu trúc dữ liệu cây nhị phân và các thuật toán trên
cây nhị phân tìm kiếm giải quyết các bài toán ứng
dụng.
2
11/07/2020
3.1
CÁC KHÁI NIỆM
3
11/07/2020
Nút trong
Nút lá
4
11/07/2020
Bậc 1
Bậc 2
Bậc 3
Bậc 0
10
5
11/07/2020
Mức 0
Mức 1
Mức 2
Mức 3
Cây có mức là 3
11
12
6
11/07/2020
+
Mỗi phần tử trong cây nhị phân
chứa 3 thành phần: thành phần
* -
info để lưu trữ giá trị phần tử,
2
thành phần left để lưu địa chỉ
2 + 8
của phần tử con bên trái, thành
phần right để lưu trữ địa chỉ của
3 5
phaafn tử con bên phải
13
14
7
11/07/2020
15
16
8
11/07/2020
3.2
CÂY NHỊ PHÂN TÌM KIẾM
17
Cây nhị phân tìm kiếm là cây nhị phân mà giá trị (khóa) của
phần tử bên trái của một node có giá trị nhỏ hơn giá trị (khóa)
của node, giá trị (khóa) của các phần tử bên phải của một
node thì lớn hơn giá trị (khóa) của node đó
18
9
11/07/2020
40
55
20
60
45
10 25
65
50
5 15 30
19
60
45
10 25
65
50
5 15 30
20
10
11/07/2020
21
Do tính chất của cây nhị phân tìm kiếm, một node trong cây sẽ có
giá tri lớn hơn các node bên trái của nó và có giá trị nhỏ hơn giá
trị của các node bên phải của nó. Do đó, để tìm một node gốc với
x. Nếu giá trị node gốc bằng x, tìm thấy và kết thúc. Nếu giá trị
node gốc lớn hơn x, thì so sánh x với node con bên trái của node
gốc (nếu có). Nếu giá trị node gốc nhỏ hơn x, so sánh x với node
con bên phải node gốc (nếu có). Thực hiện tuần tự như trên cho
đến khi tìm thấy x, hoặc đi đến NULL.
22
11
11/07/2020
20 50
10 25 43 55
5 15 30 47 60
23
15 < 40
20 50
10 25 43 55
5 15 30 47 60
24
12
11/07/2020
40
15 < 20 50
10 25 43 55
5 15 30 47 60
25
40
20 50
55
10 < 15 25 43
5 15 30 47 60
26
13
11/07/2020
40
20 50
10 25 43 55
30 47 60
5 15 =15
27
20 50
10 25 43 55
5 15 30 47 60
28
14
11/07/2020
45 > 40
20 50
10 25 43 55
5 15 30 47 60
29
Bước 1: Gán địa chỉ node gốc cho biến p (bắt đầu node gốc) Node *p = root;
Bước 2: Tại node có địa chỉ do p quản lý, so sánh giá trị của
if (p->info == x)
node và giá trị phần tử x:
return p;
Nếu giá trị node = x, tìm thấy một node có giá trị x. Thuật else if (p -> info > x)
toán kết thúc p=p -> left;
else
Nếu giá trị node > x, chuyển sang xét node con bên trái p=p -> right;
node đang xét.
Nếu giá trị node < x, chuyển sang xét node con bên phải
node đang xét.
Bước 3: Nếu giá trị node đang xét khác NULL lặp lại bước
2. Ngược lại kết thúc. Không tìm thấy.
30
15
11/07/2020
31
32
16
11/07/2020
Để thêm một node mới (có giá trị x) vào cây nhị phân tìm kiếm,
đầu tiên tìm kiếm nnode có giá trị x trong cây (giá tri node là
khóa của node trong cây).
Nếu tìm thấy đã có một node có giá trị x (giá trị khóa) trong cây,
không them và kết thúc thuật toán.
Nếu không tim thấy node có giá tri x trong cây, them node mới
có giá trị x vào cây. Node mới them vào tại vị trí NULL trong quá
trình kết thúc tìm kiếm ở trên. Node mới thêm vào là nút lá.
33
40
20 50
10 25 43 55
5 15 30 47 60
34
17
11/07/2020
40 < 45
20 50
10 25 43 55
5 15 30 47 60
35
40 <
20 50
25 43 55
10
5 15 30 47 60
45
36
18
11/07/2020
40
20 50
10 25 43 55
5 15 30 47 60
37
40 < 49
20 50
10 25 43 55
5 15 30 47 60
38
19
11/07/2020
40 <
20 50
25 43 55
10
5 15 30 47 60
49
39
40
20
11/07/2020
41
42
21
11/07/2020
20 50
10 25 43 55
5 15 30 47 60
43
44
22
11/07/2020
40
20 50
10 25 43 55
5 15 30 47 60
45
46
23
11/07/2020
40
20 50
10 25 43 55
5 15 30 47 60
47
48
24
11/07/2020
49
Để xóa một node có giá trị là x trong cây nhị phân tìm kiếm, thực
hiện tuần tự các bước sau:
50
25
11/07/2020
20 50
10 25 43 55
7 15 23 30 47 60
5 21
22
51
20 50
10 25 43 55
7 15 23 30 47 60
21
22
52
26
11/07/2020
40
20 50
10 25 43 55
7 15 23 30 47 60
5 21
22
53
40
20 50
10 25 43 55
7 15 23 30 60
5 21
22
54
27
11/07/2020
20 50
10 25 43 55
7 15 23 30 47 60
5 21
22
55
40
20 50
10 25 43 55
1
7 15 23 30 60
5 21
22
56
28
11/07/2020
40
20 50
10 25 43 55
5 15 23 30 60
21
22
57
40
20 50
10 25 43 55
7 15 23 30 47 60
5 21
22
58
29
11/07/2020
40
20 50
1
10 25 43 55
7 15 23 30 60
5 21
22
59
20 50
10 25 43 60
7 15 23 30
5 21
22
60
30
11/07/2020
5 21
22
61
40
20 50
10 25 43 55
7 15 23 30 47 60
5 21
62
31
11/07/2020
40
20 50
10 25 43 55
7 15 23 30 47 60
5 21
22
Node 21 là node cực trái
63
Bước 2: Chép giá tri node thế mang ên node cần xóa. Trong thí dụ trên, chép giá trị 21
lên node chứa giá trị 20.
40
21 50
10 25 43 55
7 15 23 30 47 60
5 21
22
64
32
11/07/2020
21 50
10 25 43 55
7 15 23 30 47 60
5 21
22
Node thế mang là node cực trái nên liên kết trái của node này bằng NULL, do đó node
thế mạng có bậc 1 (hoặc bậc 0). Việc xóa node thế mạng về trường hợp 2 (xóa node
bậc 1)
65
40
21 50
10 25 43 55
7 15 23 30 47 60
5 22
66
33
11/07/2020
67
68
34
11/07/2020
69
70
35