Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 1: Cây (Tree) - Ngô Công Thắng

CHƯƠNG 1: CÂY (TREE)  
GV. Ngô Công Thắng  
Bộ môn Công nghệ phần mềm  
Khoa Công nghệ thông tin  
Website: dse.hua.edu.vn/ncthang  
Chương 1: Cây (Tree)  
1. Định nghĩa và khái niệm  
2. Cây nhị phân  
3. Cây tổng quát  
4. Ứng dụng  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.2  
1. Định nghĩa và khái niệm  
1.1. Định nghĩa cây (tree)  
l Cây là một tập hợp hữu hạn các nút, trong  
đó có một nút đặc biệt gọi là gốc (root).  
Giữa các nút có một quan hệ phân cấp gọi  
là quan hệ cha con.  
l Một cây không có nút nào gọi là cây rỗng  
(null tree).  
l Các ví dụ về cây  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.3  
Ví dụ 1: Mục lục của một chương  
được biểu diễn dạng cây  
Chương 6  
6.1  
6.2  
6.2.1  
6.2.2  
6.3  
6.3.1  
6.3.2  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.4  
Ví dụ 2: Biểu thức số học được  
biểu diễn dạng cây  
x+y*(z-t)+u/v  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.5  
Ví dụ 3: Các tập bao nhau được  
biểu diễn dạng cây  
l Có các tập bao nhau  
A, B, C, D, E, F  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.6  
1.2. Các khái niệm  
l Gốc (Root): Gốc là nút đặc biệt không có  
nút cha.  
Ví dụ 3: A là gốc. A là cha của B, E, F.  
B, E, F là con của A.  
B, E, F cũng là gốc của các cây con của A  
l Cấp (Degree): Số con của một nút gọi là  
cấp của nút đó.  
Ví dụ 3: A có cấp là 3. E, F có cấp là 0.  
B có cấp là 2.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.7  
1.2. Các khái niệm (tiếp)  
l Lá (Leaf): Nút có cấp bằng không gọi là lá hay  
nút tận cùng.  
Ví dụ 3: C,D,E,F là lá.  
l Nút nhánh (Branch Node): Nút không là lá được  
gọi là nút nhánh hay nút trong.  
Ví dụ 3: B là nút nhánh.  
l Mức (Level): Gốc cây có mức là 1. Nếu nút cha  
có mức là i thì nút con có mức là i+1.  
Ví dụ 3: A có mức là 1. B, E, F có mức là 2.  
C, D có mức là 3.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.8  
1.2. Các khái niệm (tiếp)  
l Chiều cao của cây (Height) hay chiều sâu của  
cây (Depth): Là số mức lớn nhất của nút có trên  
cây.  
Ví dụ 1: Cây có chiều cao là 3  
Ví dụ 2: Cây có chiều cao là 5  
Ví dụ 3: Cây có chiều cao là 3  
l Đường đi (Path): Nếu n1, n2, ..., nk là các dãy nút  
mà ni là cha của ni+1 (1£i<k) thì dãy đó gọi là  
đường đi từ n1 đến nk. Độ dài của đường đi  
bằng số nút trừ đi 1. .  
Ví dụ 3: Đường đi từ A đến C cố độ dài là 3-1=2.  
Đường đi từ A đến E cố độ dài là 2-1=1.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.9  
1.2. Các khái niệm (tiếp)  
l Nếu thứ tự các cây con của một nút được coi  
trọng thì cây đang xét là cây có thứ tự, ngược lại  
là cây không có thứ tự.  
l Thường thì thứ tự các cây con của một nút  
được đặt từ trái sang phải.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.10  
1.2. Các khái niệm (tiếp)  
l Đối với cây, ngoài quan hệ cha con, người  
ta còn mở rộng phỏng theo quan hệ trong  
gia tộc.  
l Rừng (Forest): Nếu có một tập hữu hạn  
các cây phân biệt thì ta gọi tập đó là rừng.  
l Nếu bỏ nút gốc của một cây thì ta sẽ có  
một rừng.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.11  
2. Cây nhị phân  
2.1. Định nghĩa và tính chất  
2.1.1. Định nghĩa cây nhị phân  
l Cây nhị phân là dạng đặc biệt của cấu trúc  
cây, mọi nút trên cây chỉ có tối đa là 2 con.  
l Đối với cây con của một nút người ta phân  
biệt cây con trái và cây con phải. Như vậy  
cây nhị phân là cây có thứ tự.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.12  
Ví dụ 1: Hai cây sau đây là khác nhau  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.13  
Ví dụ 2: Cây nhị phân suy biến có  
dạng một danh sách tuyến tính  
Cây lệch trái  
Cây lệch phải  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.14  
Ví dụ 2: Cây nhị phân suy biến có dạng  
một danh sách tuyến tính (tiếp)  
Cây zíc zắc  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.15  
2.1.1. Định nghĩa cây nhị phân (tiếp)  
l Cây nhị phân hoàn chỉnh: Là cây nhị phân mà  
các nút nhánh ở các mức đều có hai nút con.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.16  
2.1.1. Định nghĩa cây nhị phân (tiếp)  
l Cây nhị phân đầy đủ: Là cây nhị phân mà các  
nút ở mọi mức của nút nhánh đều có hai con.  
Cây nhị phân đầy đủ là trường hợp đặc biệt của  
cây nhị phân hoàn chỉnh.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.17  
2.1.2. Tính chất  
l Số lượng tối đa các nút ở mức i trên 1 cây  
nhị phân là 2(i-1) (i³ 1).  
l Số lượng tối đa các nút trên 1 cây nhị  
phân có chiều cao h là 2h – 1.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.18  
2.2. Lưu trữ cây nhị phân  
2.2.1. Lưu trữ kế tiếp  
l V
nú
nà
l Dthứ  
i cụ:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.19  
2.2.1. Lưu trữ kế tiếp (tiếp)  
l Với cách lưu trữ bằng mảng, khi biết địa  
chỉ của nút cha sẽ tính được địa chỉ của  
nút con và ngược lại. Nếu nút cha là i thì  
con trái là 2i và con phải là 2i+1. Nếu nút  
con là i thì nút cha là [i/2].  
l Nếu cây không đầy đủ ta phải thêm các  
nút trống vào để đươc cây nhị phân đầy  
đủ, sau đó lưu trữ cây đầy đủ đã tạo ra.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.20  
Ví dụ  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.21  
2.2.2. Lưu trữ phần tán  
l Trong cách lưu trữ này, mỗi nút ứng với một  
phần tử nhớ có quy cách dưới đây.  
l Để truy nhập vào các nút trong cây nhị phân cần  
có một con trỏ T trỏ vào nút gốc của cây đó.  
l Người ta quy ước: Nếu cây rỗng thì T = F  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.22  
Ví dụ  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.23  
2.3. Các phép toán duyệt cây nhị phân  
l Phép xử lý các nút trên cây (gọi chung là  
phép thăm - visit) là cách thăm tất cả các nút  
của cây một cách hệ thống, sao cho mỗi nút  
chỉ được thăm một lần.  
l Một nút có 2 con, ta có 3 cách duyệt, các  
cách duyệt được định nghĩa đệ quy như sau:  
l Cách 1: Duyệt theo thứ tự trước (preorder  
traversal)  
l Thăm gốc  
l Duyệt cây con trái theo thứ tự trước  
l Duyệt cây con phải theo thứ tự trước  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.24  
2.3. Duyệt cây nhị phân (tiếp)  
l Cách 2: Duyệt theo thứ tự giữa (inorder  
traversal)  
l Duyệt cây con trái theo thứ tự giữa  
l Thăm gốc  
l Duyệt cây con phải theo thứ tự giữa  
l Cách 3: Duyệt theo thứ tự sau ( postorder  
traversal)  
l Duyệt cây con trái theo thứ tự sau  
l Duyệt cây con phải theo thứ tự sau  
l Thăm gốc  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.25  
Ví dụ với cây nhị phân sau:  
l Duyệt theo thứ tự trước: A B D E C F G  
l Duyệt theo thứ tự giữa: D B E A F C G  
l Duyệt theo thứ tự sau: D E B F G C A  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.26  
2.3. Duyệt cây nhị phân (tiếp)  
l Các thủ tục duyệt cây nhị phân đều được  
viết ở dạng đệ qui.  
l Giả sử cây nhị phân lưu trữ bằng danh  
sách liên kết, T là con trỏ trỏ tới gốc, phép  
thăm là in giá trị trường Infor của nút đó.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.27  
Duyệt cây theo thứ tự trước:  
Procedure PreOrder(T)  
If T = f then  
Return  
Else Begin  
Write(Infor(T))  
Call PreOrder(Lptr(T))  
Call PreOrder(Rptr(T))  
End;  
Return  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.28  
Duyệt cây theo thứ tự giữa:  
Procedure InOrder(T)  
If T = f then Begin  
Return  
End  
Else Begin  
Call InOrder(Lptr(T))  
Write(Infor(T))  
Call InOrder(Rptr(T))  
End;  
Return  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.29  
Duyệt cây theo thứ tự sau:  
Procedure PostOrder(T)  
If T = f then Begin  
Return  
End  
Else Begin  
Call PostOrder(Lptr(T))  
Call PostOrder(Rptr(T))  
Write(Infor(T))  
End;  
Return  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.30  
Bài tập  
l Bài 1:  
l Xây dựng cây nhị phân biểu diễn biểu thức:  
(a+b/c)*(d-e*f)  
l Vẽ sơ đồ lưu trữ cây nhị phân biểu diễn biểu  
thức ở dạng lưu trữ kế tiếp, lưu trữ liên kết.  
l Cho biết thứ tự các nút khi duyệt cây nhị phân  
đó theo 3 cách.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.31  
Bài tập (tiếp)  
Bài 2. Cho cây nhị phân dưới đây. Hãy  
l Vẽ sơ đồ lưu trữ cây nhị phân ở dạng lưu trữ kế tiếp và lưu trữ  
liên kết  
l Cho biết thứ tự các nút khi duyệt cây nhị phân đó theo 3 cách.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.32  
3. Cây tổng quát  
l Cây tổng quát là cây có cấp m nào đó.  
l Nếu biểu diễn cây tổng quát bằng danh sách  
liên kết thì một nút có bao nhiêu nhánh sẽ có  
bấy nhiêu trường liên kết, cách biểu diễn này  
phức tạp. Nếu biểu diễn cây bằng mảng thì quá  
trình xử lý cũng rất phức tạp.  
l Để đơn giản ta biểu diễn cây tổng quát bằng cây  
nhị phân. Ta nhận thấy với bất kỳ nút nào trên  
cây tổng quát nếu có thì chỉ có:  
l Một nút con cực trái (con cả)  
l Một nút em kề cận phải  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.33  
3. Cây tổng quát  
l Khi chuyển sang cây nhị phân tương đương,  
mỗi nút có con trái là con cực trái, con phải là  
em kề cận phải.  
l Mỗi nút của cây tổng quát có có qui cách như  
sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.34  
Ví dụ:  
Cây nhị phân  
tương đương  
Cây tổng quát  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.35  
3. Cây tổng quát  
l Sau khi chuyển thành cây nhị phân tương  
đương ta có thể lưu trữ cây tổng quát  
bằng danh sách liên kết.  
l Duyệt cây tổng quát sử dụng các phép  
duyệt cây nhị phân tương đương.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.36  
4. Ứng dụng  
4.1. Cây biểu diễn biểu thức  
l Biểu thức số học với các phép toán 2 ngôi như  
+ - * / có thể biểu diễn bởi cây nhị phân có các  
nút với quy cách như sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.37  
4.1. Cây biểu diễn biểu thức (tiếp)  
l Nếu không phải nút lá thì giá trị của TYPE sẽ là 1, 2, 3,  
4, 5 ứng với các phép +, - , *, /, q (đổi dấu).  
l Nếu là nút lá thì TYPE có giá trị là 0 để chỉ biến hoặc  
hằng tương ứng với nút đó, còn RPTR trỏ tới địa chỉ  
trong bảng ký hiệu của biến hoặc hằng và LPTL = Null.  
l Ta kí hiệu Value(F) là giá trị ô F  
l E là con trỏ trỏ tới gốc cây.  
l F là con trỏ phụ.  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.38  
Ví dụ: Biểu diễn biểu thức a*b+c/2  
bằng cây nhị phân sau:  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.39  
4.2. Định giá trị biểu thức  
l Thuật giải định giá trị biểu thức biểu diễn bởi cây nhị phân có gốc E.  
Thuật giải này được viết dưới dạng đệ quy:  
Function EVAL(E)  
Case  
TYPE(E)=0: Begin F:=RPTR(E)  
Return(Value(F))  
End  
TYPE(E)=1: Return ( EVAL(LPTR(E))+EVAL(RPTR(E)))  
TYPE(E)=2: Return ( EVAL(LPTR(E))-EVAL(RPTR(E)))  
TYPE(E)=3: Return ( EVAL(LPTR(E))*EVAL(RPTR(E)))  
TYPE(E)=4: Return ( EVAL(LPTR(E))/EVAL(RPTR(E)))  
TYPE(E)=5: Return ( - EVAL(RPTR(E)))  
Else Return(00)  
End case  
Return  
Ngô Công Thắng  
Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 01  
1.40  
Tải về để xem bản đầy đủ
pdf 22 trang yennguyen 18600 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật 2 - Chương 1: Cây (Tree) - Ngô Công Thắng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_cau_truc_du_lieu_va_giai_thuat_2_chuong_1_cay_tree.pdf