1 / 116

Chương 7: CÂY (Tree)

Chương 7: CÂY (Tree). Nội dung. Cấu trúc cây (Tree) Cấu trúc cây nhị phân ( Binary Tree ) Cấu trúc cây nhị phân tìm kiếm ( Binary Search Tree ) Cấu trúc cây nhị phân tìm kiếm cân bằng (AVL Tree). Tree – Định nghĩa.

zeki
Download Presentation

Chương 7: CÂY (Tree)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chương 7: CÂY (Tree)

  2. Nội dung • Cấu trúc cây (Tree) • Cấu trúc cây nhị phân (Binary Tree) • Cấu trúc cây nhị phân tìm kiếm (Binary Search Tree) • Cấu trúc cây nhị phân tìm kiếm cân bằng (AVL Tree)

  3. Tree – Định nghĩa • Cây là một tập hợp T các phần tử (gọi là nút của cây) trong đó có 1 nút đặc biệt được gọi là 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 • A tree is a set of one or more nodes T such that: • i. there is a specially designated node called a root • ii. The remaining nodes are partitioned into n disjointed set of nodes T1, T2,…,Tn, each of which is a tree

  4. Công ty A R&D Kinh doanh Taøi vuï Saûn xuaát Noäi ñòa Quoác teá TV CD Amplier Chaâu aâu Myõ Caùc nöôùc Tree – Ví dụ • Sơ đồ tổ chức của một công ty

  5. Cây thư mục Tree – Ví dụ

  6. Tree – Ví dụ

  7. Tree – Ví dụ

  8. Tree – Ví dụ Không phải cây Nhận xét: Trong cấu trúc cây không tồn tại chu trình

  9. Tree - Một số khái niệm cơ bản • Bậc của một nút (Degree of a Node of a Tree): • Là số cây con của nút đó. Nếu bậc của một nút bằng 0 thì nút đó gọi là nút lá (leaf node) • Bậc của một cây (Degree of a Tree): • Là bậc lớn nhất của các nút trong cây. Cây có bậc n thì gọi là cây n-phân • Nút gốc (Root node): • Là nút không có nút cha • Nút lá (Leaf node): • Là nút có bậc bằng 0

  10. Tree - Một số khái niệm cơ bản • Nút nhánh: • Là nút có bậc khác 0 và không phải là gốc • Mức của một nút (Level of a Node): • Mức (gốc (T) ) = 0 • Gọi T1, T2, T3, ... , Tn là các cây con của T0 Mức(T1) = Mức(T2) = ... = Mức(Tn) = Mức(T0) + 1

  11. Tree – Ví dụ

  12. Một số khái niệm cơ bản • Độ dài đường đi từ gốc đến nút x: Px = số nhánh cần đi qua kể từ gốc đến x • Độ dài đường đi tổng của cây: trong đó Px là độ dài đường đi từ gốc đến X • Độ dài đường đi trung bình: PI = PT/n (n là số nút trên cây T) • Rừng cây: là tập hợp nhiều cây trong đó thứ tự các cây là quan trọng

  13. Nội dung 22 Cấu trúc cây (Tree) Cấu trúc cây nhị phân (Binary Tree) Cấu trúc cây nhị phân tìm kiếm (Binary Search Tree) Cấu trúc cây nhị phân tìm kiếm cân bằng (AVL Tree)

  14. Binary Tree – Định nghĩa • Cây nhị phân là cây mà mỗi nút có tối đa 2 cây con

  15. Cây con trái Cây con phải Hình ảnh một cây nhị phân Binary Tree – Ví dụ

  16. Binary Tree – Ví dụ • Cây lệch trái và cây lệch phải

  17. Binary Tree – Ví dụ • A full binary tree

  18. Cây nhị phân dùng để biểu diễn một biểu thức toán học: Binary Tree – Ví dụ

  19. Binary Tree – Một số tính chất • Số nút nằm ở mức i ≤ 2i • Số nút lá ≤ 2h-1, với h là chiều cao của cây • Chiều cao của cây h ≥ log2N, với N là số nút trong cây • Số nút trong cây ≤ 2h-1với h là chiều cao của cây Xem them gtrinh trang 142

  20. Cây nhị phân đầy đủ Binary Tree 0 1 2 3 4 5 6 7 8 … 0 1 2 3 4 5 6 7 8 k=3 2k+1, 2k+2

  21. Binary Tree - Biểu diễn • In general, any binary tree can be represented using an array, but …?

  22. Binary Tree - Biểu diễn • Sử dụng một biến động để lưu trữ các thông tin của một nút: • Thông tin lưu trữ tại nút • Địa chỉ nút gốc của cây con trái trong bộ nhớ • Địa chỉ nút gốc của cây con phải trong bộ nhớ • Khai báo cấu trúc cây nhị phân: • Để quản lý cây nhị phân chỉ cần quản lý địa chỉ nút gốc: Tree root; • structTNode • { • DataTypedata; • TNode *pLeft, *pRight; • }; • typedefTNode* Tree;

  23. a b c d e g h i f j k Binary Tree - Biểu diễn

  24. Binary Tree - Duyệt cây nhị phân • Có 3 kiểu duyệt chính có thể áp dụng trên cây nhị phân: • Duyệt theo thứ tự trước - preorder (Node-Left-Right: NLR) • Duyệt theo thứ tự giữa - inorder (Left-Node-Right: LNR) • Duyệt theo thứ tự sau - postorder (Left-Right-Node: LRN) • Tên của 3 kiểu duyệt này được đặt dựa trên trình tự của việc thăm nút gốc so với việc thăm 2 cây con

  25. Binary Tree - Duyệt cây nhị phân • Duyệt theo thứ tự trước NLR (Node-Left-Right) • Kiểu duyệt này trước tiên thăm nút gốc sau đó thăm các nút của cây con trái rồi đến cây con phải • Thủ tục duyệt có thể trình bày đơn giản như sau: • voidNLR (Tree t) • { • if (t != NULL) • { • // Xử lý t tương ứng theo nhu cầu • NLR(t->pLeft); • NLR(t->pRight); • } • }

  26. Binary Tree - Duyệt cây nhị phân NLR A B C D E F G H I J K L M N O P M Kết quả: A B D H I N E J O K C F L P G

  27. Binary Tree - Duyệt cây nhị phân • Duyệt theo thứ tự giữa LNR (Left-Node-Right) • Kiểu duyệt này trước tiên thăm các nút của cây con trái sau đó thăm nút gốc rồi đến cây con phải • Thủ tục duyệt có thể trình bày đơn giản như sau: • voidLNR(Tree t) • { • if (t != NULL) • { • LNR(t->pLeft); • //Xử lý nút t theo nhu cầu • LNR(t->pRight); • } • }

  28. Binary Tree - Duyệt cây nhị phân LNR A B C D E F G H I J K L M N O P G Kết quả: H D N I B J O E K A F P L C M

  29. Binary Tree - Duyệt cây nhị phân • Duyệt theo thứ tự giữa LRN (Left-Right-Node) • Kiểu duyệt này trước tiên thăm các nút của cây con trái sau đó thăm đến cây con phải rồi cuối cùng mới thăm nút gốc • Thủ tục duyệt có thể trình bày đơn giản như sau: • voidLRN(Tree t) • { • if (t != NULL) • { • LRN(t->pLeft); • LRN(t->pRight); • // Xử lý tương ứng t theo nhu cầu • } • }

  30. Binary Tree - Duyệt cây nhị phân LRN A B C D E F G H I J K L M N O P A Kết quả: H N I D O J K E B P L F M G C

  31. Binary Tree - Duyệt cây nhị phân LRN • Một ví dụ quen thuộc trong tin học về ứng dụng của duyệt theo thứ tự sau là việc xác định tồng kích thước của một thư mục trên đĩa

  32. (3 + 1)3/(9 – 5 + 2) – (3(7 – 4) + 6) = –13 Binary Tree - Duyệt cây nhị phân LRN • Tính toán giá trị của biểu thức dựa trên cây biểu thức

  33. Mộ số thao tác trên cây • Đếm số node • Đếm số node lá • Tính chiều cao

  34. Đếm số node

  35. Đếm số node • Số node (EmptyTree) = 0 • Số node (Tree) = 1 + Số node (Tree.Left) + Số node (Tree.Right)

  36. Đếm số node lá

  37. Đếm số node lá Số nút lá (EmptyTree) = 0 Số nút lá(RootOnly) = 1 Số nút lá(Tree) = Số nút lá (Tree.Left) + Số nút lá (Tree.Right)

  38. Tính chiều cao

  39. Tính chiều cao Height(Tree) = 1 + maximum(Height(Tree.Left), Height(Tree.Right)) Depth(EmptyTree) = -1

  40. Nội dung 51 Cấu trúc cây (Tree) Cấu trúc cây nhị phân (Binary Tree) Cấu trúc cây nhị phân tìm kiếm (Binary Search Tree) Cấu trúc cây nhị phân tìm kiếm cân bằng (AVL Tree)

  41. Binary Search Tree • Trong chương 6, chúng ta đã làm quen với một số cấu trúc dữ liệu động. Các cấu trúc này có sự mềm dẻo nhưng lại bị hạn chế trong việc tìm kiếm thông tin trên chúng (chỉ có thể tìm kiếm tuần tự) • Nhu cầu tìm kiếm là rất quan trọng. Vì lý do này, người ta đã đưa ra cấu trúc cây để thỏa mãn nhu cầu trên • Tuy nhiên, nếu chỉ với cấu trúc cây nhị phân đã định nghĩa ở trên, việc tìm kiếm còn rất mơ hồ • Cần có thêm một số ràng buộc để cấu trúc cây trở nên chặt chẽ, dễ dùng hơn • Một cấu trúc như vậy chính là cây nhị phân tìm kiếm

  42. Binary Search Tree - Định nghĩa • Cây nhị phân tìm kiếm (CNPTK) là cây nhị phân trong đó tại mỗi nút, khóa của nút đang xét lớn hơn khóa của tất cả các nút thuộc cây con trái và nhỏ hơn khóa của tất cả các nút thuộc cây con phải • Nhờ ràng buộc về khóa trên CNPTK, việc tìm kiếm trở nên có định hướng • Nếu số nút trên cây là N thì chi phí tìm kiếm trung bình chỉ khoảng log2N • Trong thực tế, khi xét đến cây nhị phân chủ yếu người ta xét CNPTK

  43. 44 18 88 59 108 13 37 15 23 40 55 71 Binary Search Tree – Ví dụ

  44. Binary Search Tree – Ví dụ

  45. Binary Search Tree – Ví dụ

  46. Binary Search Tree – Biểu diễn • Cấu trúc dữ liệu của CNPTK là cấu trúc dữ liệu biểu diễn cây nhị phân nói chung (???) • Thao tác duyệt cây trên CNPTK hoàn toàn giống như trên cây nhị phân (???) • Chú ý: khi duyệt theo thứ tự giữa, trình tự các nút duyệt qua sẽ cho ta một dãy các nút theo thứ tự tăng dần của khóa

  47. 25 10 37 3 18 29 50 1 6 12 20 35 41 5 13 32 Binary Search Tree – Duyệt cây Duyệt giữa trên CNPTK Duyệt inorder: 1 3 5 6 10 12 13 18 20 25 29 32 35 37 41 50

  48. 25 10 37 3 18 29 50 1 6 12 20 35 41 5 13 32 Binary Search Tree – Duyệt cây Duyệt sau trên CNPTK Duyệt postorder:

  49. 25 10 37 3 18 29 50 1 6 12 20 35 41 5 13 32 Binary Search Tree – Duyệt cây Duyệt trước trên CNPTK Duyệt preorder:

  50. Binary Search Tree – Tìm kiếm 25 Tìm kiếm trên CNPTK 10 37 3 18 29 50 1 6 12 20 35 41 5 13 32 Giống nhau Node gốc nhỏ hơn Node gốc lớn hơn Khác nhau Số node duyệt: 5 Số lần so sánh: 9 Tìm kiếm 13 Tìm thấy

More Related