Cấu trúc dữ liệu di động chuong 4

43 182 0
Cấu trúc dữ liệu di động chuong 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHƯƠNG IV CẤU TRÚC CÂY Nguyễn Trọng Chỉnh chinhnt@uit.edu.vn CẤU TRÚC CÂY ❖GIỚI THIỆU ❖CÂY NHỊ PHÂN ❖CÂY NHỊ PHÂN TÌM KIẾM ❖CÂY NHỊ PHÂN CÂN BẰNG GIỚI THIỆU ❖ĐỊNH NGHĨA CÂY - - Cây tập hợp phần tử, gọi node, liên kết với cạnh có hướng Trong đó: Có node đặc biệt gọi gốc (root) Hướng cạnh từ node A đến node B biểu diễn quan hệ A cha (parent) B hay B (child) A Các node có node cha gọi node anh em (sibling) Ngoài node gốc, có nhiều node khác Mỗi node (subtree) GIỚI THIỆU ❖ĐỊNH NGHĨA CÂY Ví dụ: - A gốc T - A cha B, G, H - B, G, H anh em - B, H, gốc T - G gốc gồm node gốc T A B C D F G H E I J K GIỚI THIỆU ❖MỘT SỐ KHÁI NIỆM - Bậc nút: số nút Ví dụ: Bậc B 4, bậc G - Bậc cây: bậc lớn node - Node gốc: node node cha - Node lá: node node con, hay có bậc Ví dụ: node G, node I - Node trung gian (node trong): node node GIỚI THIỆU ❖MỘT SỐ KHÁI NIỆM - Mức node: ▪ Mức node gốc ▪ Giả sử node X có mức i, Y X mức Y i+1 - Độ dài đường từ gốc đến node X: số cạnh cần từ gốc đến X - Nếu có đường từ X đến Y X gọi tiền bối (ancestor) Y hay Y hậu duệ (descendant) X GIỚI THIỆU ❖MỘT SỐ KHÁI NIỆM - Chiều cao node X (hX) số node đường dài từ X đến node - Chiều cao (h) chiều cao node gốc - Độ sâu node X (dX) độ dài đường từ node gốc đến X cộng thêm GIỚI THIỆU ❖MỘT SỐ KHÁI NIỆM T h=4 mức A mức G H E I mức mức B C D F h=3 J K GIỚI THIỆU ❖BIỂU DIỄN CÂY Dùng mảng (danh sách đặc): - Đánh số thứ tự node - Nếu node thứ i cha node thứ j giá trị phần tử thứ j mảng i - Nếu node thứ i node gốc, giá trị phần tử thứ i mảng -1 GIỚI THIỆU ❖BIỂU DIỄN CÂY Dùng mảng (danh sách đặc): Ví dụ: cho A G B C D H F E I J 10 K Biểu diễn mảng là: -1 1 1 0 7 10 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Duyệt trung thứ tự (duyệt - In-order): nguyên tắc duyệt bên trái, sau xử lý nút gốc, duyệt bên phải Ví dụ: A Kết duyệt trung thứ tự BADCFE B C D E F 29 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Duyệt trung thứ tự (duyệt - In-order): void LNR(TREE root) { if (root) { LNR(root->pLeft); // xử lý root LNR(root->pRight); } } 30 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Duyệt hậu thứ tự (duyệt sau - Post-order): nguyên tắc duyệt bên trái, sau duyệt bên phải xử lý nút gốc Ví dụ: A Kết duyệt hậu thứ tự BDFECA B C D E F 31 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Duyệt hậu thứ tự (duyệt sau - Post-order): void LRN(TREE root) { if (root) { LRN(root->pLeft); LRN(root->pRight); // xử lý root } } 32 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN - Tạo từ kết duyệt: tạo từ kết duyệt sau: ▪ Tiền thứ tự trung thứ tự ▪ Hậu thứ tự trung thứ tự 33 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt tiền thứ tự trung thứ tự: Nguyên tắc: - Node X dãy tiền thứ tự node gốc - Node X nằm dãy trung thứ tự, chia dãy thành dãy bên trái bên phải Dãy bên trái trái X, dãy bên phải phải X - Thực tương tự cho dãy bên trái trước đến dãy bên phải 34 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt tiền thứ tự trung thứ tự: Ví dụ: tạo từ kết duyệt: NLR: A B C D E F LNR: B A D C F E 35 CÂY NHỊ PHÂN NLR: A B C D E F LNR: B A D C F E A NLR: B C D E F LNR: B B NLR: C D E F LNR: D C F E NLR: D E F LNR: D C NLR: E F LNR: F E D NLR: F LNR: F E F 36 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt tiền thứ tự trung thứ tự: Giả sử kết duyệt số nguyên - pre kết duyệt tiền thứ tự - in kết duyệt trung thứ tự - m, n số đầu cuối dãy tiền thứ tự cần xét - k, l số đầu cuối dãy trung thứ tự cần xét 37 CÂY NHỊ PHÂN TREE CreateTree(int *pre, int *in, int m, int n, int k, int l) { int i; TREE root; if (l < k) return NULL; root = new Node; if (root != NULL) { root->key = pre[m]; for (i = k; i pLeft = CreateTree(pre, in, m+1, n, k, i - 1); root->pRight = CreateTree(pre, in, m+i-k+1, n, i+1,l); } return root; } 38 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt hậu thứ tự trung thứ tự: Nguyên tắc: - Node cuối X dãy hậu thứ tự node gốc - Node X nằm dãy trung thứ tự, chia dãy thành dãy bên trái bên phải Dãy bên trái trái X, dãy bên phải phải X - Thực tương tự cho dãy bên phải trước đến dãy bên trái 39 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt hậu thứ tự trung thứ tự: Ví dụ: tạo từ kết duyệt: LRN: B D F E C A LNR: B A D C F E 40 CÂY NHỊ PHÂN LRN: B D F E C A LNR: B A D C F E A LRN: B LNR: B B LRN: B D F E C LNR: D C F E C LRN: B D LNR: D D LRN: B D F E LNR: F E E LRN: B D F LNR: F F 41 CÂY NHỊ PHÂN ❖CÁC THAO TÁC CƠ BẢN ▪ Tạo từ kết duyệt tiền thứ tự trung thứ tự: Giả sử kết duyệt số nguyên - post kết duyệt hậu thứ tự - in kết duyệt trung thứ tự - m, n số đầu cuối dãy hậu thứ tự cần xét - k, l số đầu cuối dãy trung thứ tự cần xét 42 CÂY NHỊ PHÂN TREE CreateTree(int *post, int *in, int m, int n, int k, int l) { int i; TREE root; if (l < k) return NULL; root = new Node; if (root != NULL) { root->key = post[n]; for (i = k; i pRight=CreateTree(post,in,m,n-1,i+1,l); root->pLeft=CreateTree(post,in,m,n+i-l-1,k,i-1); } return root; } 43 ... tử thứ i mảng -1 GIỚI THIỆU ❖BIỂU DI N CÂY Dùng mảng (danh sách đặc): Ví dụ: cho A G B C D H F E I J 10 K Biểu di n mảng là: -1 1 1 0 7 10 GIỚI THIỆU ❖BIỂU DI N CÂY Dùng danh sách liên kết: -... T - Gọi n số node T, h chiều cao T, có h  log2(n + 1) 18 CÂY NHỊ PHÂN ❖TỔ CHỨC DỮ LIỆU struct TenDulieu { // liệu quản lý }; struct Node { TenDulieu key; Node *pLeft, *pRight; }; typedef Node...CẤU TRÚC CÂY ❖GIỚI THIỆU ❖CÂY NHỊ PHÂN ❖CÂY NHỊ PHÂN TÌM KIẾM ❖CÂY NHỊ PHÂN CÂN BẰNG GIỚI THIỆU ❖ĐỊNH

Ngày đăng: 08/09/2017, 15:38

Từ khóa liên quan

Trích đoạn

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan