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

43 13 0
  • Loading ...
Loading...
1/43 trang

Thông tin tài liệu

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

ĐẠ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
- Xem thêm -

Xem thêm: Cấu trúc dữ liệu di động chuong 4 , Cấu trúc dữ liệu di động chuong 4 , Cấu trúc dữ liệu di động chuong 4

Gợi ý tài liệu liên quan cho bạn

Nhận lời giải ngay chưa đến 10 phút Đăng bài tập ngay
Nạp tiền Tải lên
Đăng ký
Đăng nhập