ĐỊNH NGHĨA VÀ CÁC KHÁI NIỆM 4. Định nghĩa cây Cây bao gồm các nút, có một nút đặc biệt được gọi là gốc (root) và các cạnh nối các nút. Cây được định nghĩa đệ quy như sau: Định nghĩa cây Bước cơ sở: Một nút r là cây và r được gọi là gốc của cây này. Bước quy nạp: Giả sử 7¡, 7;,., 7; là các cây với gốc là rụ, ra.
Ta có thể xây dựng cây mới bang cach dat r lam cha (parent) của các nút r\, 7a,. Trong cây nay r là gôc và 7\, 7›,., 7¿ là các cây con của gôc z., r¿ được gọi là con của nút z. Chú ý: Nhiều khi để phù hợp, ta cần định nghĩa cây rỗng (null tree) là cây không có nút nào cả. Cầu trúc đệ quy của cây Cây trong thực tế ứng dụng ~ Biểu đồ lịch thí đầu.
— Cây gia phả. — Biểu đồ phân cấp quản lý hành chính. — Cây thư mục. — Cầu trúc của một quyển sách.
143 ~ Cây biểu thức. ~ Cay phân hoạch tập hợp. Cây lịch thi đấu Trong đời thường, cây rất hay được sử dụng để diễn tả lịch thi đấu của các giải thé thao theo thể thức đầu loại trực tiếp, chẳng hạn vòng 2 của World Cup. Pháp @ Tây Ban Nha Brazin @ Anh Đức @ Ucraina Italia 6 Achentina Cay gia pha Nikolaus Johan I Nikolaus JacobI 1667-1748 1662-1716 1654-1705 Nikolaus II Daniel Johan It Nikolaus JN 1695-1726 1700-1782 1710-1790 1687-1759 Johan IT Jacob IE 1746-1807 1759-1789 Cây gia pha của các nhà toán hoc dong ho Bernoulli Cây phân cấp quần lý hành chính [Ban Giám đốc ị Phòng Phòng Phong Phang Phong Hành chỉnh Tổ chức Tài vụ Kinh doanh Kế hoạch [re] [vantnw] [ II 1 | lÌ | lÌ | 144 Cay thu muc H1 fe] ea) [0800] (3[0000000FlashDisk] ({00KSTNDocum] CH0Baocso] H0BookDown] | {I{0ChuongTrinhCeoDang] [0GiaoTrinh] {300] 1[000TestsProblemForSomeProh] - : Ê3{01-01-2006] kế 3[0AIgorithmic] Cl[0BlumFeraitv] 3[BCombinGeameTheorv] [0DisMotn] CH-¬1[0000DM_Far_Vd] [¬[000Stide] [9501DM_F06] ¬[abutetovị C[Baigiang].
{5[Homework Assignments, UMBC CMSC 441, Fall 2006_files} ([Alan T_ Sherman (Home Page)_files] IICMSC 203 Home Page_tiles] [Cygwin Information and Installation_files] Ciflect2_jim_files] (afLect3_files] {[Form kiem dinh 2007] £[Saoluu] C(t] Cifesct64] [DM] | Cấu trúc của sách Sách Cl 1. : 145 Cây mục lục Book Chapter 1 [Subsection 1. Cay gia pha nguge (Ancestor Tree) Cây phả hệ ngược: mỗi người đều có bố mẹ. Cây này là cây nhị phân (binary tree).
ar] Cây phân hoạch tập hợp es {1,2, 3, 4, 5, 6,7,8, 9, 10} | Tập con các số lết Tập con các số chan: {1,3, 5,7, 9} {2,4,6, 8,10}. {1, 9} Tập con các sé nguyên tb: {2, 4, 8, 10} Tập con số hoàn hảo: {3, 5,7} {6} 4. Các thuật ngữ chính Các thuật ngữ chính liên quan đến cây là: — Niit — node; - Gốc - root; — Lá ~ leaf; — Con — child; ~ Cha — parent; — Té tién —‘ancestors; — Hau dué — descendants: ~ Anh em ~ sibling; — Nut trong = internal node; ~ Chidu cao — hight, chidu sau — depth., n¿ là đấy nút trên cây sao cho n; là cha của nại với 1 < í < &, thì dãy này được gọi là đường đi (padh) từ nút m tới nút my. Độ dài (length) của đường ởi bằng số lượng nút trên đường đi trừ bớt 1.
Như vậy đường đi độ dài 0 là đường đi từ một nút đền chính nó. 147 Nếu có đường đi từ nút ø tới nút b, thì ø được gọi là đổ tiên (ancestor) của b, còn 5 duge goi la hdu dué (descendant) cha a. Trong cay, gộc là nút không có tô tiên chính thường và mọi nút khác trên cây đêu lả hậu duệ chính thường của nó. Một nút không có hậu duệ chỉnh thường được gọi là 14 (leay).
Các nút có cùng cha được gọi là anh em (sibling). Cây con (subiree) của một cây là một nút cùng với tất cả các hậu dué của nó. Chiều cao (heigbi) của nút trên cây bằng độ dài của đường đi đài nhất từ nút đó đến lá cộng 1. Chiều cao của cây (eight oƒa tre) là chiều cao của gốc.
Độ sẩu/mức (depth/level) của nút bằng 1 cộng với độ dài của đường đi duy nhất từ gốc đến nó. root, ancestor internal node parent sibling descendent aikaek ` are leaves Cây con (Subtree) Node and its decendants 148 Đường đi trên cây * Path eo 1 (c ) \, Path 2 G) Path 1: {4,867} Path 2: {d,i} Độ cao (heighO và độ sâu/mức (depth/level) Độ:cao của cây là 5 Tà quan sát cây trong tin học như thế nào? 149 Bậc (Depree) Số lượng con của nút x được gọi là bậc (degree) của x. Ou 3 % vì Saws ay a — A» © @) 4. Cây có thir tw (Ordered Tree) Thứ tự của các nút Các con của một nút thường được xếp theo thứ tự ¿ ái sang phải.
Như vậy bai cây trong hình sau đây là khác nhau, bởi vi hai con của nit a xuất hiện trong hai cây theo thứ tự khác nhau: @) @) OO © Cây với các nút được xếp thử tự được gọi là cây có thứ tự. Ta sẽ xét chủ yếu là cây có thứ tự. Vì vậy, tiếp theo đây thuật ngữ cây là để chỉ cấy có thứ tự. Khi muốn khẳng định không quan tâm đến thứ tự, ta sẽ phải nói rõ là cây không có thứ tự.
Thứ tự "từ trái sáng phải" của các anh em (các con của cùng một nút) có thể tổng quát để so sánh hai nútkhông, có quan hệ tô tiên — hậu duệ. Quy tác 80 ) sánh là: của j. 150 Ví dụ: Nút ¿ ở bên phải nút:b, ở bên trái các nút í,.ƒ ƒ, 2; ø VàẠ không ở bên trái cũng như bên phải của các nút tổ tiên của nó 4, e, e. +: ha vất Xếp thứ tự các nút na Ta có thể xếp thứ tự các nút của cây theo nhiều cách.
Gó ba thứ tự quan trọng nhất, đó là Thứ tự trước, Thú tự sau va Thứ tự gilta (Preorder, Postorđer và Tnorder). Các thứ tự này được định nghĩa một cách đệ quy nhự. sau: " l ~— Nếu cây 7 là rỗng, thì danh sách rỗng là danh sách, theo tứ tự, trước, thứ tự sau và thứ tự giữa của cây 7. — Nếu cây 7 có một nút, thì nút đó chính là danh sách theo thứ tự trước, thứ tự sau và thứ tự giữa của cây 1.
: — Trái lại, giả sử 7à cây có Bốc r với các cây con là 7Ị; Ti. Duyệt theo thứ tự trước — Preorder Traversal” ‘ Thứ tự trước (hay duyệt theo thử tự trước ~ preorder traversal) của các Trút của cây 7là: — Gốc r của T; _ Tiếp đến là các nút của 7¡ theo thứn tự trước; — Sau đó là các nút của 7; theo thứ tự trước; wey ~ Và cuối cùng là các nút của 7 theo thứ tự trước. Duyệt theo thứ tự Sau — Postorder Traversal _ /. Thứ tự sau của các nút của cây Tia: — Cac nut cha 7; theo thir ty sau; — Tiếp đến là các nút của 7; theo thứ tự sau; ~ Các nút'của 7, theo thứ ft sau; ei oe Oe — Sau cùng là nút gốc z.
151 Duyệt theo thứ tự giữa— Inorder Traversal Thứ tự giữa của các nút của cây T là: — Các nút của 7ì theo thứ tự giữa; : =+©'Tiếp đến là núĩ gốc r; -~ ˆ 12 'Tiếp theo là các nữ của Tp, | , Tị, tnỗi nhóm mút được xếp theo thứ tự giữa. Thuật toán duyệt theo thứ tự trước~Preorder Traversal ˆ vald PREORDER (øođeTr) ` f ¬ (1) Đưa rar; (2) for (mỗi con c của z, nếu có, theo thứ-tự từ trái sang) đo PREORDER(); } ` Vi dy: Thứ tự trước của các đỉnh của cây trên hình vẽ là: %bj dể - & hy Ú ƒ G 'Thuật toán duyệt theo thứ tự sau — Postorder Traversal Thuật toán đuyệt theo thứ tự sau thu được bằng cách đảo ngược hai thao tác (1) và (2) trong PREORDER: void POSTORDER ( nođeT z) { for (mỗi con c của r, nếu có, theo thứ tự từ trái sang) do POSTORDER(c) Dua rar; } Vi du: Diy cdc đỉnh được liệt kê theo #lu# tự sạu của cây trong hình vẽ là: bhi gif oda 152 'Thuật toán duyệt theo thứ tự giữa — Inorder Traversal void INORDER (nodeT r) { + jf (r là lá ) Đưa ra r; else { TNORDER(con trái nhật của r); Dua rar; for (mỗi con ơ của r, ngoại trừ con trải nhất, theo thứ tự từ trái sang) do INORDER(c); } Ví dụ: Dãy các đỉnh của cây trong hình vẽ được liệt kê theo thứ tự giữa là: b,a,h, e, Ù G ÿ ƒ 8; d Xếp thứ tự các nút, Để nhớ cách đưa ra các nút theo ba thứ ft vừa trình bày, hãy hình dung là ta đi vòng quanh bên ngoài. bắt đầu từ gốc, ngược chiều kim đồng hồ và sát theo cây nhất. Chẳng hạn, đường đi đó đối với cây trong các ví dụ đã xét ở trên như sau: Đối với thứ tự trước, ta đứa ra nút mỗi khí đi qua nó, ` 'Đối với thứ tự san, ta đưa ra nút khi qua nó ở lần cuối trước khi quay về cha của nó.
Đối với thứ tự giữa, ta đưa ra lá ngay khi đi qua nó, cònn những, nút trong được đưa rà khi lần thứ hai được đi qua. các lá được xếp theo thứ tự từ trái i sang phải như nhau trong cả ba cach sap xép.4, Cây có nhãn (Labeled Tree) Thông thường người ta gán cho mỗi nút của cây một nhãn (2e!) hoặc một giá trị, cũng tương tự như chúng ta đã gán mỗi nút của đanh sách với một phần tử. 153 Nghĩa là, nhãn của nút không phải tên gợi của nút mà là giá trị được cất giữ trong nó. Trong một số ứng dụng, ta có thể thay đổi nhãn của nút mà tên của nó vẫn được giữ nguyên.
Ví dụ: Xét cây có 7 nit m,. Ta gán nhãn cho các nút như sau: — Nút ø có nhãn *; — Nút ø¿ có nhãn +; — Nút ø có nhãn —; — Nút mạ có nhãn 4a; — Nút n; có nhãn ð; = Nút nạ có nhãn a; — Nút mị cô nhãn e. Cây biểu thức (Expression Tree) Cây trong ví dụ vừa nêu có tên gọi là cây biểu thức: (a + b)*(4~ 2) Quy tắc để cây có nhãn biểu diễn một biểu thức là: — Mỗi nút lá có nhãn là toán hạng và chỉ gồm một toán hạng đó. Ví dụ nút 4 biểu diễn biểu thức ø.
— Mỗi nút trong n được gán nhãn là phép toán. Giả sử z: có nhãn là phép toán hai ngôi q, như + hoặc *, con trái biểu điển biểu thúc Z và con phải biểu điễn biểu thức Ey, Khi đó n biểu diễn biểu thức (1) q (Ea). Ta có thể bỏ dấu ngoặc nếu như điều đó là không cân thiết.