Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân - Nguyễn Tri Tuấn

34 63 0
Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân - Nguyễn Tri Tuấn

Đ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

Bài giảng Cấu trúc dữ liệu và giải thuật: Cây nhị phân cung cấp cho các bạn các kiến thức: Các khái niệm và thuật ngữ cơ bản, cài đặt cấu trúc dữ liệu, duyệt cây, cây nhị phân tìm kiếm, hàng đợi ưu tiên. Mời các bạn cùng tham khảo nội dung chi tiết.

Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên – Priority Queue Winter 2017 51 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các khái niệm thuật ngữ  Các ví dụ  Đặc điểm cấu trúc  Tree ADT  Các thuật ngữ liên quan  Các định lý Winter 2017 52 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các ví dụ (1)  Ví dụ 1: cách lưu trữ phân cấp  tốn đưa thư  Cần tìm người: Tèo, khoa CNTT, ĐH KHTN, Quận 5, Tp.HCM, Việt nam  Cách tìm “Tèo” nhanh ?  Sử dụng mảng (array) ?  Sử dụng danh sách liên kết (linked list) ? Winter 2017 53 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các ví dụ (2) Trái đất (7 tỉ) China Korea Vietnam (88 triệu) Tp.HCM (12 triệu) Quận ĐH.KHTN (20,000 người) Hà nội Quận 12 Khoa CNTT (5000 người) Khoa Toán “Tèo” Winter 2017 54 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các ví dụ (3)  Ví dụ 2: biểu thức (a-b)*(c/d) * - / c b a Winter 2017 55 CuuDuongThanCong.com d (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các ví dụ (4)  Ví dụ 3: ngữ pháp – mơ tả thành phần ngữ pháp câu Winter 2017 56 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Đặc điểm cấu trúc  Cây cấu trúc liệu quan trọng để biểu diễn tính “kế thừa”, “phân cấp”  Cây gia phả (trong dòng họ)  Cây phân cấp lồi (trong sinh vật)  …  Linked List  Chèn/xóa phần tử: O(1)  Tìm kiếm: O(n)  Cây nhị phân tìm kiếm  Thêm/xóa phần tử: O(log2n)  Tìm kiếm: O(log2n) Winter 2017 57 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Tree ADT (1)  Một (Tree) là:  Một tập phần tử, gọi node p1,p2,…,pN  Nếu N=0, gọi rỗng (NULL)  Nếu N>0: • Tồn node pr gọi gốc • Các node lại chia thành m tập hợp khơng giao nhau: T1, T2, …, Tm • Mỗi Tập rỗng  Cây rỗng (NULL) Winter 2017 58 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Tree ADT (2) Node gốc Cây a c Cây d k j e g i h f b Cây Cây Winter 2017 Cây 59 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Tree ADT (3) Cây a c j i e g h k f b Cây Cây Winter 2017 60 CuuDuongThanCong.com d Cây Cây (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các thuật ngữ liên quan (7) Complete but not full Full but not complete ? Complete and full Winter 2017 70 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các thuật ngữ liên quan (8) Complete ? Full ? (a) (b) (c) (d) Winter 2017 71 CuuDuongThanCong.com (e) (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các định lý (1)  Cho T nhị phân đầy đủ (full binary tree) Gọi N số node, L số node lá, I số node nội (tính node gốc)       L=I+1 N = 2I + I = (N – 1)/2 L = (N + 1)/2 N = 2L – I=L–1 Winter 2017 72 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các định lý (2)  Nếu T nhị phân có h level số node tối đa T 2h –  Nếu T nhị phân có h level số node tối đa 2h-1  Nếu T nhị phân, có khơng q 2h node   mức h (h ≥ 0) Nếu T nhị phân có N node số mức tối thiểu T log2(N + 1) Nếu T nhị phân có L node số mức tối thiểu T log2L + Winter 2017 73 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên – Priority Queue Winter 2017 74 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt nhị phân mảng (1) Winter 2017 Array index Key Left Right A B -1 C D -1 -1 E -1 F G -1 -1 H -1 -1 I -1 -1 75 CuuDuongThanCong.com Tree Node (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt nhị phân mảng (2) template class BINARY_TREE { private: struct TreeNode { T int int }; int root; int maxSize; TreeNode *nodes; void void void data; left; right; // data of node // index to left child // index to right child // index to root of tree // max number of node in tree // array to store nodes of tree LNR(int p); NLR(int p); LRN(int p); public: BINARY_TREE(int size); BINARY_TREE(const BINARY_TREE &aTree); ~BINARY_TREE(); // operations bool isEmpty(); int countNode(); int height(); bool insert(T newItem); bool remove(T item); void preorder(); void inorder(); void postorder(); }; // end class Winter 2017 // call NLR(root) // call LNR(root) // call LRN(root) 76 CuuDuongThanCong.com // init a tree with ‘size’ node // copy constructor // destructor (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt nhị phân trỏ (1) A linked binary tree Winter 2017 77 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt nhị phân trỏ (2) template class BINARY_TREE { private: struct TreeNode { T TreeNode TreeNode }; TreeNode *root; data; *left; *right; // pointer to root of tree void LNR(TreeNode *p); void NLR(TreeNode *p); void LRN(TreeNode *p); public: BINARY_TREE(); BINARY_TREE(const BINARY_TREE &aTree); ~BINARY_TREE(); // operations bool isEmpty(); int countNode(); int height(); bool insert(T newItem); bool remove(T item); void preorder(); void inorder(); void postorder(); }; // end class Winter 2017 // default constructor // copy constructor // destructor // call NLR(root) // call LNR(root) // call LRN(root) 78 CuuDuongThanCong.com // data of node // pointer to left child // pointer to right child (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên – Priority Queue Winter 2017 79 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Duyệt (1)  Có cách duyệt cây:  Duyệt gốc trước (Pre-Order) - NLR  Duyệt gốc (In-Order) - LNR  Duyệt gốc sau (Post-Order) - LRN Winter 2017 80 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Duyệt (2)  Duyệt gốc trước (Pre-Order) - NLR template void BINARY_TREE::NLR(TreeNode *p) { if (p==NULL) return; “Xử lý nút gốc p” NLR(p->left); NLR(p->right); } Winter 2017 81 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Duyệt (3) Minh họa cách duyệt “gốc trước” Winter 2017 82 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Duyệt (4)  Duyệt gốc (In-Order) - LNR template void BINARY_TREE::LNR(TreeNode *p) { if (p==NULL) return; LNR(p->left); “Xử lý nút gốc p” LNR(p->right); } Winter 2017 83 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Duyệt (5)  Duyệt gốc sau (Post-Order) - LRN template void BINARY_TREE::LRN(TreeNode *p) { if (p==NULL) return; LRN(p->left); LRN(p->right); “Xử lý nút gốc p” } Winter 2017 84 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt ... Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt nhị phân mảng (1) Winter 2017 Array index Key Left Right A B -1 C D -1 -1 E -1 F G -1 -1 H -1 -1 I -1 -1 75 CuuDuongThanCong.com... CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary... right child (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary

Ngày đăng: 11/01/2020, 17:05

Từ khóa liên quan

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

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

Tài liệu liên quan