13 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 25 Các khái niệm và thuật ngữ cơ bản Các thuật ngữ liên quan ! Mức h của cây đầy đủ bậc d có d h nút ! VD. mức h=2 của cây bậc 3 có bao nhiêu nút ? ! h mức đầu tiên của cây đầy đủ bậc d có số nút là: ! 1 + d + d 2 + d 3 + … + d h-1 = (d h -1)/(d –1) ! 3 mức đầu tiên của cây bậc 3 có bao nhiêu nút ? Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 26 Tổngquanvềcâynhịphân ! Định nghĩa ! Cách thức lưu trữ cây ! Các phương pháp duyệt cây 14 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 27 Tổngquanvềcâynhịphân Định nghĩa ! Câynhịphân là cây có bậc = 2 * 0 / a b c d Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 28 Tổngquanvềcâynhịphân Định nghĩa ! Độ cao của câynhịphân có N nút: ! h T(max) = N ! h T(min) = [log 2 N] + 1 15 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 29 Tổngquanvềcâynhịphân Định nghĩa ! Trắc nghiệm: Hãy vẽ tất cả các câynhịphân có 3 nút ? Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 30 Tổngquanvềcâynhịphân Cách thức lưu trữ cây ! Có 2 cách tổ chức câynhị phân: ! Lưu trữ bằng mảng ! Lưu trữ bằng con trỏ cấu trúc 16 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 31 Tổngquanvềcâynhịphân Cách thức lưu trữ cây, sử dụng mảng * 0 / a b c d -1-1d6 -1-1c5 -1-1b4 -1-1a3 65/2 43-1 21*0 Con phảiCon tráiNút# Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 32 Tổngquanvềcâynhịphân Cách thức lưu trữ cây, sử dụng mảng // Định nghĩa các cấu trúc dữ liệu typedef struct tagBT_NODE { intData; intLeft;// chỉ số nút con trái intRight;// chỉ số nút con phải } BT_NODE;// binary tree node BT_NODE tree[N];// câynhịphân có N nút 17 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 33 Tổngquanvềcâynhịphân Cách thức lưu trữ cây, sử dụng con trỏ Nút gốc của cây con trái Data pLeft pRight pRoot Count Nút gốc của cây con phải Data pLeftpRight Data pLeft pRight BT_NODE BIN_TREE Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 34 Tổngquanvềcâynhịphân Cách thức lưu trữ cây, sử dụng con trỏ // Định nghĩa các cấu trúc dữ liệu typedef struct tagBT_NODE { intData; tagBT_NODE*pLeft; // con trỏ đến nút con trái tagBT_NODE*pRight; // con trỏ đến nút con phải } BT_NODE;// binary tree node 18 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 35 Tổngquanvềcâynhịphân Cách thức lưu trữ cây, sử dụng con trỏ // Định nghĩa các cấu trúc dữ liệu … (tiếp theo) typedef struct BIN_TREE { intCount; // Số nút trong cây BT_NODE*pRoot; // con trỏ đến nút gốc };// binary tree Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 36 Tổng quanvềcâynhịphân Các phương pháp duyệt cây ! Có 3 cách duyệt cây: ! Duyệt gốc trước (Pre-Order) NLR ! Duyệt gốc giữa (In-Order) LNR ! Duyệt gốc sau (Post-Order) LRN 19 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 37 Tổng quanvềcâynhịphân Các phương pháp duyệt cây void NLR(const BT_NODE *pCurr) { if (pCurr==NULL) return; “Xử lý nút gốc pCurr” NLR(pCurr->pLeft); NLR(pCurr->pRight); } Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 38 Tổng quanvềcâynhịphân Các phương pháp duyệt cây Minh họa cách duyệt “gốc trước” 20 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 39 Tổng quanvềcâynhịphân Các phương pháp duyệt cây void LNR(const BT_NODE *pCurr) { if (pCurr==NULL) return; LNR(pCurr->pLeft); “Xử lý nút gốc pCurr” LNR(pCurr->pRight); } Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 40 Tổng quanvềcâynhịphân Các phương pháp duyệt cây void LRN(const BT_NODE *pCurr) { if (pCurr==NULL) return; LRN(pCurr->pLeft); LRN(pCurr->pRight); “Xử lý nút gốc pCurr” } 21 Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 41 Tổngquanvềcâynhịphân Các phương pháp duyệt cây ! Trắc nghiệm: ! Cho biết kết quả duyệt cây biểu thức ở trang #27 theo mỗi cách NLR, LNR, LRN ? ! Viết thủ tục/hàm đếm số nút trong cây ? ! Viết thủ tục/hàm đếm số nút lá trong cây ? ! Viết thủ tục/hàm tính chiều cao của cây ? Spring 2004Data Structure & Algorithm -Nguyen Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 42 Tổngquanvềcâynhịphân Các phương pháp duyệt cây ! Trắc nghiệm: ! Viết giải thuật duyệt cây theo mức ? . Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 30 Tổng quan về cây nhị phân Cách thức lưu trữ cây ! Có 2 cách tổ chức cây nhị phân: ! Lưu trữ bằng mảng ! Lưu trữ bằng. Tri Tuan - Khoa CNTT ĐH KHTN Tp.HCM 29 Tổng quan về cây nhị phân Định nghĩa ! Trắc nghiệm: Hãy vẽ tất cả các cây nhị phân có 3 nút ? Spring 2004Data Structure