1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu: Chương 6 - ThS. Thiều Quang Trung (2018)

48 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 48
Dung lượng 1,21 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Cấu trúc dữ liệu - Chương 6: Kiểu cấu trúc cây cung cấp cho người học các kiến thức: Khái niệm cấu trúc cây - tree; đặc điểm cấu trúc cây; định nghĩa kiểu cấu trúc cây; các thao tác trên cấu trúc cây. Mời các bạn cùng tham khảo nội dung chi tiết.

Trang 1

C HƯƠNG 6

K IỂU C ẤU T RÚC C ÂY

GV Th.S Thiều Quang Trung Trường Cao đẳng Kinh tế Đối ngoại

Trang 2

• Khái niệm cấu trúc cây - tree

Trang 3

Khái niệm cấu trúc cây

• Cây là một tập hợp T các phần tử (gọi là nút của cây), gồm có:

– một nút đặc biệt gọi là nút gốc,

– các nút còn lại được chia thành những tập rời

nhau T1, T2, …,Tn theo quan hệ phân cấp, trong đó

Ti cũng là một cây

• Mỗi nút ở cấp i sẽ quản lý một số nút ở cấp i+1 Quan hệ này gọi là quan hệ cha –con

Trang 4

Khái niệm cấu trúc cây

1 1

Trang 5

Mức 4 Mức 3 Mức 2 Mức 1

Khái niệm cấu trúc cây

• Chiều dài đường đi đến nút x: là số nhánh cần đi qua

kể từ gốc đến x

x

Trang 6

Đặ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

GV Thiều Quang Trung

Trang 7

Định nghĩa kiểu dữ liệu

typedef struct TNODE

Trang 9

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ỷ, …

Trang 11

• Ngược lại thì thêm

về bên phải

Trang 13

Duyệt cây

Trang 14

GV Thiều Quang Trung

Trang 15

Hàm duyệt 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) {

if(t!=NULL) {

cout<<t->Key<<“\t”; NLR(t->pLeft);

NLR(t->pRight);

} }

Trang 16

Bài tập

Vẽ cây nhị phân tìm kiếm theo thứ tự nhập

từ trái sang phải và duyệt cây theo thứ tự

trước:

• 27; 19; 10; 21; 35; 25; 41; 12; 46; 7

• H; B; C; A; E; D; Z; M; P; T

• 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

16

GV Thiều Quang Trung 16

Trang 17

Bước Kết quả duyệt theo thứ tự LNR

Trang 18

Hàm duyệt 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

18

void LNR (TREE t) {

if(t!=NULL) {

LNR(t->pLeft);

cout<<t->Key<<“ “; LNR(t->pRight);

} }

GV Thiều Quang Trung

Trang 19

Bước Kết quả duyệt theo thứ tự LRN

Trang 20

– Duyệt cây con bên

phải của t theo thứ tự

LRN

– In giá trị của t

20

void LRN (TREE t) {

if(t!=NULL) {

LRN(t->pLeft);

LRN(t->pRight);

cout<<t->Key<<“ “;

} }

GV Thiều Quang Trung 20

Trang 21

Bài tập

• Bài 4 Vẽ cây nhị phân tìm kiếm theo thứ tự

nhập:

27, 19, 10, 21, 3, 15, 41, 50, 30, 7

Hãy duyệt cây trên theo thứ tự giữa

• Bài 5 Vẽ cây nhị phân tìm kiếm theo thứ tự

nhập:

H, B, C, A, E, D, T, M, X, O

Hãy duyệt cây trên theo thứ tự sau

Trang 22

Vấn đề cần quan tâm

Tạo cây từ kết quả duyệt 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 sangphải vào cây theo nguyên tắc tạo cây

Tạo cây từ kết quả duyệt 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 sangtrái vào cây theo nguyên tắc tạo cây

22

GV Thiều Quang Trung 22

Trang 23

Vấn đề cần quan tâm

Tạo cây từ kết quả duyệt LNR

• Gọi r: Số lượng giá trị cho trước

• Gọi m = r div 2: Giá trị ở giữa

Trang 24

Bài tập

Bài 6 Vẽ cây nhị phân tìm kiếm T biết rằng

khi duyệt cây T theo thứ tự NLR thì được dãysau: 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ự LRN

• Liệt kê các nút lá của cây Liệt kê các nútnhánh của cây

24

GV Thiều Quang Trung 24

Trang 25

Bài 7 Vẽ cây nhị phân tìm kiếm T biết rằng

khi duyệt cây T theo thứ tự LRN thì đượcdã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ự NLR

• 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

Bài tập

Trang 26

Hàm nhập dữ liệu vào cây

void Nhap(TREE &t)

Trang 27

Hàm main gọi thao tác duyệt LNR

Trang 30

Xóa node trên cây

1 Node lá

2 Node có 1 cây con

3 Node có 2 cây con

GV Thiều Quang Trung 30

Trang 31

Xóa node lá

Xóa 1Xóa 23

7

23 4

Trang 32

Xóa node 1 cây con

Xóa 6Xóa 15

4 23

GV Thiều Quang Trung 32

Trang 33

Xóa node 2 cây con

16

23

Trang 34

• Cho dãy số theo thứ tự nhập từ trái sang

phải: 20, 15, 35, 30, 11, 13, 17, 36, 47, 16,

38, 28, 14

– Vẽ cây nhị phân tìm kiếm cho dãy số trên

– 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

Trang 35

Viết hàm

1 In ra các node có giá trị chẵn

2 In ra các node có giá trị lớn hơn x

3 Độ cao của cây

4 Số node của cây

5 Tìm min, max

6 Tìm node có giá trị x

Trang 36

Viết hàm

7 Số node lá (node bậc 0)

8 Số node có 1 cây con (node bậc 1)

9 Số node chỉ có 1 cây con phải

10 Số node có 1 cây con trái

11 Số node 2 cây con (node bậc 2)

12 Các node trên từng mức của cây

13 Độ dài đường đi từ gốc đến node x

36

GV Thiều Quang Trung 36

Trang 38

Viết các hàm C/C++ thao tác cây

• Tìm chiều cao của cây

• Duyệt cây theo thứ tự giảm dần RNL

• In cấu trúc cây

GV Thiều Quang Trung 38

Trang 39

Thêm 1 nút x vào cây

int themnode(tree &t,int x)

{ if(t!=NULL)

{ if(t->key==x) return 0;

if(t->key>x) return themnode(t->pleft,x);

else return themnode(t->pright,x); }

Trang 41

Xóa 1 nút x khỏi cây

void huynode(tree &t,int x)

} else cout << "\nKhong tim thay so can tim!";

Trang 42

} else

{ cout << "Khong tim thay ";

return FALSE ; } }

GV Thiều Quang Trung 42

Trang 44

Đếm chiều cao của cây

GV Thiều Quang Trung 44

Trang 46

GV Thiều Quang Trung 46

Trang 47

Duyệt cây theo thứ tự giảm dần

Trang 48

for (i=1;i<=dichphai;i++) cout << " ";

cout << temp->key << endl;

Ngày đăng: 09/05/2021, 18:23

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm