... (TPLT.OUT)
2
1 2 3
4 5
CÀI ĐẶT THUẬTTOÁNTÌM CHU THÀNH PHẦN
LIÊN THÔNG BẰNG CHƯƠNG TRÌNH PASCAL
Thành phầnliên thông.
Chương trình xác định các thànhphầnliên thông.
Dữ liệu được lấy từ tệp ... .
x
m
y
m
Trong đó, n số đỉnh, m là
số cạnh
Sau khi lấy dữ liệu, chương trình sẽ xác định các thành
phầnliênthông và lưu vào tệp TPLT.OUT có cấu trúc:
k
x
1
x
2
…
y
1
y
2
…
… …. …
z
1
z
2
…
Trong...
... đối với thao tác tạo mới một nút trong danh
sách liên kết đôi. Giả sử chúng ta cần tạo mới một nút có thànhphần dữ liệu là
NewData.
- Thuật toán:
B1: BTNode = new BinT_OneNode
B2: IF (BTNode ... Đi theo nhánh cây con phải
B7: Lặp lại B5
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thànhphần dữ liệu là 21 vào bên phải nhất của
cây nhị phân: NewData = 21
... = NewData
Bkt: Kết thúc
- Cài đặt thuật toán:
Hàm BinT_Create_Node có prototype:
BinT_Type BinT_Create_Node(T NewData);
Hàm tạo mới một nút có thànhphần dữ liệu là NewData, hàm trả về con...
... NULL
1
0 NULL 0 NULL
- Cài đặt thuật toán:
Hàm BinT_Height có prototype:
int BinT_Height(BinT_Type BTree);
Hàm tính chiều cao của cây BTree theo thuậttoán đệ quy. Hàm trả về chiều cao ... 4 (2+1+1)
8 (3+4+1)
- Cài đặt thuật toán:
Hàm BinT_Num_Node có prototype:
int BinT_Num_Node(BinT_Type BTree);
Hàm tính số nút của cây BTree theo thuậttoán đệ quy. Hàm trả về số nút của ... Right) và sử
dụng thuậttoán đệ quy. Các cách duyệt khác bằng thuậttoán đệ quy hay không đệ
quy sinh viên tự vận dụng tương tự.
- Thuậttoán đệ quy để duyệt cây nhị phân theo thứ tự Left – Root...
... trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 165
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần tìm kiếm nút có thànhphần dữ liệu là 30 trên cây nhị phân
tìm kiếm sau: SearchData = ... tìm kiếm:
a. Tìm kiếm trên cây:
Giả sử chúng ta cần tìm trên cây nhị phântìm kiếm xem có tồn tại nút có khóa Key
là SearchData hay không.
Để thực hiện thao tác này chúng ta sẽ vận dụng thuật ...
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 167
Bây giờ giả sử chúng ta cần tìm kiếm nút có thànhphần dữ liệu là 35 trên cây nhị
phân tìm kiếm trên: SearchData = 35
CurNode BSTree...
... tiến hành hủy nút có địa chỉ là DelNode này
nếu tìm thấy (Do vậy thuậttoán này còn được gọi là thuậttoántìm kiếm và loại bỏ
trên cây). Quá trình tìm kiếm đã trình bày ở trên, ở đây chúng ta ... sẽ biến cây thành một rừng.
Giả sử chúng ta cần hủy nút có thànhphần dữ liệu (Key) là DelData ra khỏi cây nhị
phân tìm kiếm. Điều đầu tiên trong thao tác này là chúng ta phải tìm kiếm địa ... Giải Thuật
Trang: 173
Hàm thực hiện việc thêm vào cây nhị phântìm kiếm BS_Tree một nút có thành
phần Key là NewData. Hàm trả về con trỏ trỏ tới địa chỉ của nút mới thêm nếu
việc thêm thành...
... đặt thuật toán:
Hàm BST_Delete_Node_TRS có prototype:
int BST_Delete_Node_TRS(BST_Type &BS_Tree, T DelData);
Hàm thực hiện việc hủy nút có thànhphần Key là DelData trên cây nhị phântìm ... Trúc Dữ Liệu và Giải Thuật
Trang: 180
Kết quả sau khi hủy:
BSTree
DelNode 60
30 PrMLNode 65
19 40 NULL NULL
10 NULL NULL 44
NULL NULL NULL NULL
- Thuậttoán hủy 1 nút trong ... NULL NULL NULL NULL
- Thuậttoán hủy 1 nút trong cây nhị phântìm kiếm bằng phương pháp chuyển cây
con phải của nút cần hủy về thành cây con phải của cây con có nút gốc là nút
phải nhất trong...
... nhị
phân tìm kiếm cho đến khi cây trở thành rỗng.
Hàm BST_Delete có prototype:
void BST_Delete(BST_Type &BS_Tree);
Hàm thực hiện việc hủy tất cả các nút trong cây nhị phântìm kiếm BS_Tree. ...
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 190
a. Thêm một nút vào cây cân bằng:
Giả sử chúng ta cần thêm một nút NewNode có thànhphần dữ liệu là NewData vào
trong cây cân ...
V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
.
Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 192
Việc quay kết thúc, cây trở thành cây cân bằng.
AncR
AncestorNode 0 AncRR
AncL 0 AncRL
...
... Đi theo nhánh cây con phải
B7: Lặp lại B5
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thànhphần dữ liệu là 21 vào bên phải nhất của
cây nhị phân: NewData = 21
... Đi theo nhánh cây con trái
B7: Lặp lại B5
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần thêm nút có thànhphần dữ liệu là 17 vào bên trái nhất của
cây nhị phân: NewData = 17
... thuật toán:
Hàm BinT_Add_Right có prototype:
BinT_Type BinT_Add_Right(BinT_Type &BT_Tree, T NewData);
Hàm thực hiện việc thêm vào bên phải nhất trong cây nhị phân BT_Tree một nút
có thành...
... Right) và sử
dụng thuậttoán đệ quy. Các cách duyệt khác bằng thuậttoán đệ quy hay không đệ
quy sinh viên tự vận dụng tương tự.
- Thuậttoán đệ quy để duyệt cây nhị phân theo thứ tự Left – Root ... 4 (2+1+1)
8 (3+4+1)
- Cài đặt thuật toán:
Hàm BinT_Num_Node có prototype:
int BinT_Num_Node(BinT_Type BTree);
Hàm tính số nút của cây BTree theo thuậttoán đệ quy. Hàm trả về số nút của ... việc xử lý thông tin (Key) của mỗi nút. Do vậy tùy từng
trường hợp cụ thể mà chúng ta viết hàm cho phù hợp. Chẳng hạn để xuất thông
tin thì chỉ cần các lệnh xuất dữ liệu để xuất thànhphần Key....
... các phần sau.
5.2.3. Cây nhị phântìm kiếm (Binary Searching Tree)
A. Khái niệm – Cấu trúc dữ liệu:
Cây nhị phântìm kiếm là cây nhị phân có thànhphần khóa của mọi nút lớn hơn thành
phần ... trình: Cấu Trúc Dữ Liệu và Giải Thuật
Trang: 165
Bkt: Kết thúc
- Minh họa thuật toán:
Giả sử chúng ta cần tìm kiếm nút có thànhphần dữ liệu là 30 trên cây nhị phân
tìm kiếm sau: SearchData = ... tìm kiếm:
a. Tìm kiếm trên cây:
Giả sử chúng ta cần tìm trên cây nhị phântìm kiếm xem có tồn tại nút có khóa Key
là SearchData hay không.
Để thực hiện thao tác này chúng ta sẽ vận dụng thuật...