Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 6 cung cấp cho người học các kiến thức: Khái niệm về cây và cây nhị phân, biểu diễn cây nhị phân và cây tổng quát, bài toán duyệt cây nhị phân. Mời các bạn cùng tham khảo để nắm chi tiết nội dung của bài giảng!
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NGÔ QUANG THẠCH Email: thachnq@gmail.com ĐT: 01273984123 Chương 6: Cây Cây Khái niệm nhị phân Biểu diễn nhị phân tổng quát Bài toán duyệt nhị phân Giới thiệu Cây cấu trúc gần gũi có nhiều ứng dụng thực tế Cây cấu trúc phân cấp tập hợp đối tượng Một ví dụ quen thuộc cây, thư mục Ví dụ xuất từ lện TREE CMD ├───Code Snippets │ │ ├───SQL │ │ │ └───My Code Snippets │ │ ├───Visual Basic │ │ │ └───My Code Snippets │ │ ├───Visual C# │ │ │ └───My Code Snippets │ │ ├───Visual Web Developer │ │ │ ├───My HTML Snippets │ │ │ └───My JScript Snippets │ │ └───XML │ │ └───My Xml Snippets │ ├───Projects │ │ ├───VSMacros80 │ │ │ ├───MyMacros │ │ │ └───Samples │ │ └───Web │ ├───Settings │ ├───StartPages │ └───Templates Ví dụ cấu trúc trang web Khái niệm Định nghĩa Cây tập hợp T phần tử (gọi nút cây) có nút đặc biệt gọi gốc, nút lại chia thành tập rời T1, T2,…, Tn theo quan hệ phần cấp Ti Giữa nút có quan hệ phân cấp gọi "quan hệ cha con" Một số khái niệm Bậc nút : số nút Bậc : bậc lớn nút ( số tối đa nút ) Cây có bậc n gọi n-phân Nút : nút bậc Nút nhánh : nút có bậc khác gốc Xét A cha B, C, D, Còn G, H, I D Cấp A Cấp B Cấp C Các nút lá: E, F, C, G, J, K I Một số khái niệm Mức nút : Mức (gốc(T))=1 Gọi T1,T2,T3,.,Tn T0 Mức (T1)=Mức(T2)=Mức(T3)=…=Mức(Tn)=Mức(T0)+1 - Ðộ dài đường từ gốc đến nút x số nhánh cần qua kể từ gốc đến x Rừng cây: tập hợp nhiều thứ tự quan trọng Cây nhị phân Ðịnh nghĩa Cây nhị phân mà nút có tối đa Cây nhị phân Cây nhị phân đầy đủ Xóa nút có nhánh Chọn cực trái nhánh bên phải làm gốc Cài đặt void DelNode(TREE &Root, DATA x) { NODE *q; If (Root==NULL) “Báo rỗng”; else { if (xRootInfo) DelNode(RootRight,x); else { q=Root; if (qRight==NULL) Root=qLeft; else if (qLeft==NULL) Root=qRight; else SearchStandFor(RootLeft,q); free(q); } } } void SearchStandFor(tree &p, tree &q) { if(q->right!=NULL) SearchStandFor(p,q->right); else { p->data=q->data; p=q; q=q->left; } } IV Cây cân Ðịnh nghĩa Cây nhị phân tìm kiếm cân mà nút độ cao trái phải chênh lệch không Phép duyệt Duyệt qua node (mỗi node lần) Cách duyệt: Chính thức: NLR, LNR, LRN, NRL, RNL, RLN Chuẩn: NLR (preorder), LNR (inorder), LRN (postorder) Ví dụ phép duyệt NLR A B C D E H I J N Kết quả: A B D H F G K L O M P I N E J O K C F L P G M Ví dụ phép duyệt LNR A B C D E H I J N Kết quả: H D N F K O I G B L M P J O E K A F P L C M G Ví dụ phép duyệt LRN A B C D E H I J N Kết quả: H N F K L O I G D O M P J K E B P L F M G C A Cây nhị phân tìm kiếm – Binary search tree (BST) Một nhị phân tìm kiếm (BST) nhị phân rỗng node có đặc tính sau: Khóa node gốc lớn (hay nhỏ) khóa tất node bên trái (hay bên phải) Các (bên trái, phải) BST Tính chất: Chỉ cần đặc tính đủ Duyệt inorder danh sách có thứ tự Ví dụ BST 25 10 37 18 12 29 20 13 50 35 41 32 Duyệt inorder: 10 12 13 18 20 25 29 32 35 37 41 50 Các tính chất khác BST Node cực trái (hay phải): Xuất phát từ node gốc Đi sang trái (hay phải) đến không Khóa node cực trái (hay phải) nhỏ (hay lớn nhất) BST BST nhị phân có tính chất: Khóa node gốc lớn (hay nhỏ) khóa node cực trái (hay cực phải) Tìm kiếm BST Chọn hướng tìm theo tính chất BST: So sánh với node gốc, tìm thấy Tìm bên nhánh trái (hay phải) khóa cần tìm nhỏ (hay lớn hơn) khóa node gốc Giống phương pháp tìm kiếm nhị phân Thời gian tìm kiếm Tốt trung bình: O(lg n) Tệ nhất: O(n) Giải thuật tìm kiếm BST Algorithm BST_search Input: subroot node gốc target khóa cần tìm Output: node tìm thấy if (cây rỗng) 1.1 return not_found if (target trùng khóa với subroot) 2.1 return subroot if (target có khóa nhỏ khóa subroot) 3.1 Tìm bên nhánh trái subroot else 4.1 Tìm bên nhánh phải subroot End BST_search Ví dụ tìm kiếm BST 25 10 37 18 12 29 20 13 50 35 41 32 Giốngnhau Node gốc nhỏ lớn Khác Tìm kiếm 13 Tìm thấy Số node duyệt: Số lần so sánh: Ví dụ tìm kiếm BST 25 10 37 18 12 29 20 13 50 35 41 32 Khác Node gốc lớn nhỏ hơn Tìm kiếm 14 Khơng tìm thấy Số node duyệt: Số lần so sánh: 10 Bài tập xây dựng nhị phân tìm kiếm Xây dựng nhị phân tìm kiếm sau: 50, 40, 30, 20, 10, 15, 70, 60, 80, 90, 45, 35, 25, 55, 65, 75, 85 Thực Xóa nút 80 ... Node-Left-Right) Duyệt theo thứ tự ( Left-Node-Right) Duyệt theo thứ tự sau ( Left-Right-Node) Tìm phần tử x Thêm phần tử x vào Huỷ phần tử có khố x Duyệt theo thứ tự trước ( Node-Left-Right).. .Chương 6: Cây Cây Khái niệm nhị phân Biểu diễn nhị phân tổng quát Bài toán duyệt nhị phân Giới thiệu Cây cấu trúc gần gũi có nhiều ứng dụng thực tế Cây cấu trúc phân cấp tập... free(q); } } } void SearchStandFor(tree &p, tree &q) { if(q->right!=NULL) SearchStandFor(p,q->right); else { p->data=q->data; p=q; q=q->left; } } IV Cây cân Ðịnh nghĩa Cây nhị phân tìm kiếm cân