Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - TS. Nguyễn Thị Kim Thoa
lượt xem 3
download
Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 4: Cấu trúc cây, cung cấp cho người học những kiến thức như Định nghĩa cây nhị phân; Biểu diễn máy của cây nhị phân; duyệt cây nhị phân; áp dụng cấu trúc cây;... Mời các bạn cùng tham khảo!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 4 - TS. Nguyễn Thị Kim Thoa
- Chương 4: CẤU TRÚC CÂY (TREES) Data structures and Algorithms 2/18/2021 Cấu trúc dữ liệu và giải thuật 1
- Cây nhị phân • Định nghĩa • Biểu diễn máy của cây nhị phân – Lưu trữ tuần tự (kế tiếp) – Lưu trữ móc nối • Duyệt cây nhị phân • Áp dụng cấu trúc cây – Sắp xếp – Tìm kiếm 2/18/2021 Cấu trúc dữ liệu và giải thuật 2
- Định nghĩa • Cây là một cấu trúc phi tuyến, thiết lập trên một tập hữu hạn các phần tử được gọi là “nút” – Nút đặc biệt gọi là gốc (root) – Liên kết phân cấp với các nút con gọi là quan hệ cha-con – Cây không có nút nào gọi là cây rỗng 2/18/2021 Cấu trúc dữ liệu và giải thuật 3
- Định nghĩa • Một nút là một cây, nút đó cũng là gốc của cây • Nếu T1, T2, …, Tk là các cây với n1, n2,…,nk lần lượt là các gốc, n là một nút và có quan hệ cha con với n1, n2,…,nk • Cây T được tạo lập khi n được gọi là cha của n1, n2,…,nk, các cây T1, T2, …, Tk gọi là cây con của n 2/18/2021 Cấu trúc dữ liệu và giải thuật 4
- Định nghĩa • Số các con của một nút được gọi là cấp • Nút có cấp bằng 0 được gọi là lá hay nút tận cùng • Nút không phải là lá gọi là nút nhánh (cành) • Cấp cao nhất của nút trên cây gọi là cấp của cây đó • Độ dài của đường đi: bằng số nút trên đường đi đó trừ 1 Gốc A A Cành B, D, G Lá C, E, F, H B C D Cấp 3 Chiều cao 4 Mức 1 A E F G Mức 2 B, C, D Mức 3 E, F, G H Mức 4 H 2/18/2021 Cấu trúc dữ liệu và giải thuật 5
- Cây nhị phân • Cây có thứ tự và là cây cấp hai, tức là mỗi nút có tối đa 2 con. • Hai con của một nút được phân biệt thứ tự • Nút trước gọi là nút con trái • Nút sau được gọi là nút con phải • Khi biểu diễn cây nhị phân, ta cũng cần có sự phân biệt rõ ràng giữa con trái và con phải, nhất là khi nút chỉ có một con A A B C D B E C E F G H F G D H 2/18/2021 Cấu trúc dữ liệu và giải thuật 6
- A Cây nhị phân • Là cây có thứ tự B A B Cây không thứ tự C D thì (a, b, c, d) là C D một cây duy nhất E (a) E A A A B B B D C D C D C E E (c) E (d) 2/18/2021 (b) Cấu trúc dữ liệu và giải thuật 7
- Cây nhị phân • Cây suy biến: có các nút nhánh chỉ có 1 nút con • Cây gần đầy, cây đầy đủ, cây hoàn chỉnh. A A A B B B C C C D E F D D Cây hoàn chỉnh Cây lệch phải Cây zíc-zắc A B C D E F G Cây đầy đủ 2/18/2021 Cấu trúc dữ liệu và giải thuật 8
- Tính chất cây nhị phân • Số lượng tối đa của các nút ở mức i trên cây nhị phân là 2i-1 (i>=1) • Số lượng tối đa các nút trên một cây nhị phân có chiều cao h là 2h – 1 (h>=1) • Nếu cây nhị phân đầy đủ có chiều cao h và số nút là n thì: h = log2(n+1) 2/18/2021 Cấu trúc dữ liệu và giải thuật 9
- Phép duyệt cây nhị phân • Phép thăm một nút (visit): là thao tác truy nhập vào một nút của cây để xử lý nút đó. • Phép duyệt (traversal): là phép thăm một cách hệ thống tất cả các nút của cây, mỗi nút đúng một lần. • Có 3 phép duyệt cây thông dụng: – Duyệt theo thứ tự trước (preorder traversal) – Duyệt theo thứ tự giữa (inorder traversal) – Duyệt theo thứ tự sau (postorder traversal) 2/18/2021 Cấu trúc dữ liệu và giải thuật 10
- Duyệt theo thứ tự trước (preorder traversal) • Duyệt cây theo chiều sâu: đây là giải thuật đệ quy • Nếu cây rỗng thì không làm gì • Nếu cây không rỗng: trường hợp đệ quy 1 • Thăm gốc • Duyệt cây con trái theo thứ tự trước 2 3 • Duyệt cây con phải theo thứ tự trước 4 5 6 7 VD: 1, 2, 4, 8, 9, 5, 10, 3, 6, 7 8 9 10 2/18/2021 Cấu trúc dữ liệu và giải thuật 11
- Duyệt theo thứ tự giữa (inorder travelsal) • Đây là giải thuật đệ quy • Nếu cây rỗng thì không làm gì 1 • Nếu cây không rỗng: trường hợp đệ quy • Duyệt cây con trái theo thứ tự giữa 2 3 • Thăm gốc • Duyệt cây con phải theo thứ tự giữa 4 5 6 7 VD: 8, 4, 9, 2, 10, 5, 1, 6, 3, 7 8 9 10 2/18/2021 Cấu trúc dữ liệu và giải thuật 12
- Giải thuật duyệt theo thứ tự sau (postorder travelsal): • Đây là giải thuật đệ quy • Nếu cây rỗng thì không làm gì • Nếu cây không rỗng: trường hợp đệ quy 1 • Duyệt cây con trái theo thứ tự sau • Duyệt cây con phải theo thứ tự sau 2 3 • Thăm gốc 4 5 6 7 VD: 8, 9, 4, 10, 5, 2, 6, 7, 3, 1 8 9 10 2/18/2021 Cấu trúc dữ liệu và giải thuật 13
- Ví dụ • Biểu thức toán học biểu diễn như sau: (x-2*y) + (y/z)^3 – Duyệt theo thứ tự trước (tiền tố): +-x*2y^/yz3 – Duyệt theo thứ tự sau (hậu tố): x2y*-yz/3^+ – Duyệt theo thứ tự giữa (trung tố): (x-2*y) + (y/z)^3 + - ^ x * / 3 2 y y z 2/18/2021 Cấu trúc dữ liệu và giải thuật 14
- Cài đặt cây nhị phân • Lưu trữ tuần tự (kế tiếp): Dùng vector lưu trữ V, nút thứ i trên cây thì lưu trữ ở V[i] • Lưu trữ móc nối: Nút trên cây là một phần tử có quy cách. 2/18/2021 Cấu trúc dữ liệu và giải thuật 15
- Lưu trữ tuần tự (kế tiếp) • Đánh số liên tiếp các nút trên cây theo thứ tự từ mức 1, hết mức này đến mức khác từ trái sang phải đối với các nút trên cùng một mức A 1 2 3 1 B C A 4 5 3 6 7 2 B C D E F D E F G G 14 4 5 6 7 A B C D E Φ F Φ …. Φ G 2/18/2021 Phần tử rỗngCấu trúc dữ liệu và giải thuật 16
- Lưu trữ móc nối • Mỗi nút trên cây được lưu trữ bởi phần tử có quy cách sau: – INFO: Chứa thông tin của nút LP INFO RP – RP: Chứa địa chỉ nút gốc cây con phải (trỏ tới cây con phải) – LP: Chứa địa chỉ nút gốc cây con trái (trỏ tới cây con trái ) struct Node { type Info; Node * LP, *RP; }; typedef Node* PNode; 2/18/2021 Cấu trúc dữ liệu và giải thuật 17
- Lưu trữ móc nối • Nếu không có con thì giá trị con trỏ tương ứng sẽ rỗng (NIL/NULL) • Tổ chức cấu trúc cây như sau (xem hình): o Ít nhất một con trỏ T trỏ vào nút gốc, vừa đại diện cho cây, vừa là điểm truy nhập vào các nút khác trong cây. o Các thao tác muốn truy nhập vào các nút trong cây phải thông qua con trỏ này. Khai báo cấu trúc cây T Cách 1: typedef PNode BinaryTree; 1 Cách 2: struct BinaryTree { PNode T; //con trỏ trỏ vào nút gốc 2 3 int n; // kích thước cây } 4 5 6 2/18/2021 Cấu trúc dữ liệu và giải thuật 18
- Lưu trữ móc nối • Thao tác khởi tạo: tạo một cây rỗng void InitBT (BinaryTree & T) { T = NULL; } 2/18/2021 Cấu trúc dữ liệu và giải thuật 19
- Lưu trữ móc nối • Thao tác duyệt cây theo thứ tự trước • Thao tác duyệt cây theo thứ tự giữa {Duyệt cây theo thứ tự trước} {Duyệt cây theo thứ tự giữa} void PreOrderTraversal (BinaryTree T) { void InOrderTraversal (BinaryTree T) { if (T==NULL) return; if (T==NULL) return; Visit(T); InOrderTraversal(T->LP); PreOrderTraversal(T->LP); Visit(T); PreOrderTraversal(T->RP); InOrderTraversal(T->RP); } } {Duyệt cây theo thứ tự sau} void PostOrderTraversal (BinaryTree T) { if (T==NULL) return; • Thao tác duyệt cây theo thứ tự sau PostOrderTraversal(T->LP); PostOrderTraversal(T->RP); Visit(T); } 2/18/2021 Cấu trúc dữ liệu và giải thuật 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Cấu trúc dữ liệu & thuật toán: Chương 3 - Nguyễn Đức Nghĩa
0 p | 491 | 166
-
Bài giảng Cấu trúc dữ liệu cơ bản và giải thuật - Chương 1
9 p | 258 | 29
-
Bài giảng Cấu trúc dữ liệu - Bài 1:Tổng quan về cấu trúc dữ liệu và giải thuật
47 p | 180 | 17
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 3 - Đỗ Bích Diệp
28 p | 119 | 10
-
Bài giảng Cấu trúc dữ liệu: Chương 10 - Nguyễn Xuân Vinh
31 p | 95 | 10
-
Bài giảng Cấu trúc dữ liệu 1: Chương 1 - Lương Trần Hy Hiến
7 p | 163 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 8: Cấu trúc dữ liệu ngăn xếp
28 p | 83 | 9
-
Bài giảng Cấu trúc dữ liệu giải thuật: Các kiểu dữ liệu trừu tượng cơ bản - Cấu trúc dữ liệu tuyến tính
92 p | 118 | 9
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Cấu trúc dữ liệu cây đỏ đen - Bùi Tiến Lên
25 p | 89 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 17: Cấu trúc dữ liệu dạng cây
21 p | 77 | 8
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu
193 p | 63 | 7
-
Bài giảng Cấu trúc dữ liệu: Chương Giới thiệu - Nguyễn Xuân Vinh
8 p | 112 | 7
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (2016)
62 p | 94 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 - Trần Minh Thái (Trường Đại học Hồng Bàng )
62 p | 177 | 6
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 1 – Trần Minh Thái (2017)
67 p | 107 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật – Chương 1: Tổng quan về giải thuật và cấu trúc dữ liệu
10 p | 74 | 4
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Các khái niệm cơ bản
23 p | 48 | 3
-
Bài giảng Cấu trúc dữ liệu giải thuật: Cấu trúc dữ liệu
17 p | 53 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn