Tải bản đầy đủ (.pptx) (66 trang)

Bài giảng cấu trúc dữ liệu chương 9 nguyễn xuân vinh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (762.05 KB, 66 trang )

GV: NGUYỄN XUÂN VINH

CẤU TRÚC DỮ LIỆU
DATA STRUCTURES

MÔN: CẤU TRÚC DỮ LIỆU

[214331]

TREE

Nguyễn Xuân Vinh

1

/XX

12/3/15




2

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH


Cấu trúc dữ liệu

Linear

-

Hierarchical structures

2


 Cấu trúc cây
 Cây nhị phân
 Cây nhị phân tìm kiếm

3

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Nội dung

-

3



GV: NGUYỄN XUÂN VINH

 Tập hợp các nút và cạnh nối các nút đó
 Có một nút gọi là gốc
 Quan hệ one-to-many giữa các nút
 Có duy nhất một đường đi từ gốc đến một nút
 Các loại cây:
 Nhị phân: mỗi nút có {0,1, 2} nút con
 Tam phân: mỗi nút có {0,1,2,3} nút con
 n-phân: mỗi nút có {0,1,..,n} nút con

4

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU

Cấu trúc cây

-

4


5


/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cấu trúc cây

5


6

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Khái niệm

Cạnh

Q

-

J


Z

B

K
A

gốc
nút

A

R
D

F
L



6










MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Thuật ngữ
Root node: nút gốc: không có nút cha
Leaf node: nút lá: không có nút con
Internal node: nút trong: không phải nút con và nút gốc
Height: chiều cao: khoảng cách từ gốc đến lá
Parent node (or ancestor, or superior): nút cha
Child nodes (successor): nút con

Nút gốc

1

/XX

12/3/15

Nút trong

5

3

6

Chiều cao


4

7

8

7

Nút lá

2

-

7


GV: NGUYỄN XUÂN VINH

Thuật ngữ

Root

MÔN: CẤU TRÚC DỮ LIỆU

Node A

Node C


Node E

Node I

Node F

Node J

Node G

Node K

12/3/15

Node H

Node D

Node B

/XX

Node L

8

Cây con
-

Nút anh em

8


GV: NGUYỄN XUÂN VINH

Ví dụ cây

9

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU



Một số loại cây thường gặp:






Cây nhị phân.
Cây quyết định.
Cây biểu thức.
Cây đỏ đen.



GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
10

Nội dung


Cấu trúc cây



Cây nhị phân



Cây nhị phân tìm kiếm



Cây nhị phân tìm kiếm cân bằng AVL


GV: NGUYỄN XUÂN VINH

 Cấu trúc cây đơn giản nhất
 Tại mỗi nút gồm các 3 thành phần
 Phần data: chứa giá trị, thông tin…
 Liên kết đến nút con trái (nếu có)

 Liên kết đến nút con phải (nếu có)
 Cây nhị phân có thể rỗng (ko có nút nào)
 Cây NP khác rỗng có 1 nút gốc
 Có duy nhất 1 đường đi từ gốc đến 1 nút
 Nút không có nút con bên trái và con bên phải là nút lá

11

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU

Cây nhị phân (Binary Tree)

-

11


GV: NGUYỄN XUÂN VINH

Binary Tree
Kích thước = 9 (số nút)
Mức 0
A

Cây con phải


Cây con trái

MÔN: CẤU TRÚC DỮ LIỆU

Mức 1
B

C

Mức 2
E

F

G

Mức 3

Độ sâu/chiều cao = 3
H

I

12

/XX

12/3/15

D


-

12


 Cây nhị phân đúng:
 Nút gốc và nút trung gian có đúng 2 con
 Cây nhị phân đúng có n nút lá thì số nút trên cây 2n-1

MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Binary Tree

A

B

E

F

G

/XX

12/3/15


D

C

I

J

K

13

H

-

13


 Cây nhị phân đầy đủ với chiều sâu d
 Phải là cây nhị phân đúng
 Tất cả nút lá có chiều sâu d

MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Binary Tree

Số nút = (2


d+1

A

-1)

Số nút trung gian = ?
Biết số nút tính d của cây NP đầy đủ
B

E

F

14

/XX

12/3/15

D

C

-

14

G



 Duyệt cây:
 Do cây là cấu trúc phi tuyến tính
 3 cách duyệt cây nhị phân
 Duyệt theo thứ tự trước PreOrder: NLR
 Duyệt theo thứ tự giữa InOrder: LNR
 Duyệt theo thứ tự sau PostOrder: LRN

MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Binary Tree

A

B

E

F

15

/XX

12/3/15

D


C

-

15

G


GV: NGUYỄN XUÂN VINH

Binary Tree

P
S

MÔN: CẤU TRÚC DỮ LIỆU

D
A

Pre-order (trước):

PDAMSWT

Post-order (sau):

AMDTWSP


In-order (giữa):

ADMPSTW

M

W

T

16

/XX

12/3/15

Level-Order (rộng): P D S A M W T

-

16


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
17

Cài đặt cây


 Cây có thể được cài đặt bằng:
 Mảng
 Danh sách con
 Theo con trái nhất và anh em ruột phải
 Danh sách liên kết


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
18

Cài đặt cây: bằng mảng

 Cách 1: Nếu cây T có n nút, ta gán tên các nút lần lượt là 0,1,2,..n-1 sau đó ta dùng 2 mảng A và L để lưu trữ cây
bằng cách:





Cho A[i] = j với j là nút cha của nút i.
A[i] = -1 nếu i là nút gốc.
L[i] = x với x là nhãn của nút thứ i.

18



 Cách 2:
 Dùng 1 mảng A là mảng các nút mà mỗi nút bao gồm:
Biến parent dùng để lưu trữ chỉ số của nút cha.
Biến data dùng để lưu trữ thông tin của nút đó.
 Một biến maxNode để giữ số nút hiện tại đang có trên cây.

19

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cài đặt cây: bằng mảng

19


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
20

Cài đặt cây: bằng mảng

 Nhận xét:

 hàm PARENT(n,T) tốn chỉ một hằng thời gian để lấy ra cha của nút n trong cây T.
 Các hàm đòi hỏi thông tin về các con không làm việc tốt vì phải tốn vòng lặp để dò tìm.
 Tìm nút con trái nhất của nút i là không thể xác định được.
 Cách khắc phục qui ước cách đánh thứ tự như sau:
Đánh số theo thứ tự tăng dần bắt đầu tại nút gốc.
Nút cha được đánh số trước các nút con.
Các nút con cùng một nút cha được đánh số lần lượt từ trái sang phải.

20


GV: NGUYỄN XUÂN VINH

Cài đặt cây: bằng danh sách con

 Mỗi nút có 1 danh sách các nút con
 Danh sách có thể được cài đặt bằng bất cứ cách nào ta biết. Tuy nhiên dùng danh sách liên kết sẽ thích hợp hơn vì

21

/XX

12/3/15

MÔN: CẤU TRÚC DỮ LIỆU

số nút con ta chưa biết trước.

 Nhận xét:
 Hàm đòi hỏi thông tin về các con làm việc rất thuận lợi

 Hàm PARENT, Root lại không làm việc tốt. Nó đòi hỏi ta phải duyệt tất cả các danh sách chứa các nút con.

21


22

/XX

12/3/15
MÔN: CẤU TRÚC DỮ LIỆU

GV: NGUYỄN XUÂN VINH

Cài đặt cây: bằng danh sách con

22


GV: NGUYỄN XUÂN VINH
MÔN: CẤU TRÚC DỮ LIỆU
12/3/15
/XX
23

Cài đặt cây: theo con trái nhất và anh em ruột phải

 Các cấu trúc đã dùng để mô tả cây ở trên không trợ giúp phép tạo một cây lớn từ các cây nhỏ hơn (createI)
 Ta thay thế mảng các header bằng mảng CELLSPACE chứa các struct có ba trường:
 LABELS giữ nhãn của nút

 LEFTMOST_CHILD là nút con trái nhất của nó.
 RIGHT_SIBLING là nút anh ruột phải.
 Hơn nữa mảng này giữ tất cả các nút của tất cả các cây.

23


GV: NGUYỄN XUÂN VINH

Cài đặt cây: bằng danh sách liên kết

8

MÔN: CẤU TRÚC DỮ LIỆU

pTree

5

12/3/15

1

10

3

20

7


24

/XX

9

4

-

24


GV: NGUYỄN XUÂN VINH

 Các thao tác:
 NewNode, FreeNode, Init, IsEmpty
 InsertLeft, InsertRight
 DeleteLeft, DeleteRight
 PreOrder, InOrder, PostOrder
 Search
 ClearTree

25

/XX

12/3/15


MÔN: CẤU TRÚC DỮ LIỆU

Binary Tree

-

25


×