Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p6 doc

5 201 0
Giáo trình phân tích quy trình ứng dụng thuật toán có thành phần dữ liệu newdata p6 doc

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

Thông tin tài liệu

Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 178 Tiến hành các bước để hủy DelNode: B3: PrDelNode->BST_Left = DelNode->BST_Left B4: DelNode->BST_Left = NULL PrDelNode BSTree DelNode 60 MRNode 25 65 19 NULL NULL 40 NULL NULL 10 30 44 NULL NULL NULL NULL NULL NULL Kết quả sau khi hủy: PrDelNode BSTree MRNode 60 19 65 10 40 NULL NULL NULL NULL 30 44 NULL NULL NULL NULL - Sử dụng phần tử thế mạng (standby): Theo phương pháp này chúng ta sẽ không hủy nút có đòa chỉ DelNode mà chúng ta sẽ hủy nút có đòa chỉ của phần tử thế mạng là nút phải nhất trong cây con trái của DelNode (MRNode), hoặc là nút trái nhất trong cây con phải của DelNode (MLNode). Sau khi chuyển toàn bộ nội dung dữ liệu của nút thế mạng cho DelNode (DelNodeKey = MRNode->Key hoặc DelNode->Key = MLNode->Key) thì chúng ta sẽ hủy nút thế mạng như đối với trường hợp c 1 ) và c 2 ) ở trên. Ví dụ: Giả sử cần hủy nút có Key = 25 (DelData = 25). Chúng ta sẽ chọn phần tử thế mạng MLNode là nút trái nhất trong cây con phải của DelNode (trái nhất trong DelNode->BST_Right) để hủy, Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 179 BSTree DelNode 60 25 PrMLNode 65 19 MLNode 40 NULL NULL 10 NULL 30 44 NULL NULL NULL NULL NULL NULL Chuyển dữ liệu trong MLNode về cho DelNode: DelNode->Key = MLNode->Key BSTree DelNode 60 30 PrMLNode 65 19 MLNode 40 NULL NULL 10 NULL 30 44 NULL NULL NULL NULL NULL NULL Tiến hành hủy MLNode (hủy nút lá): PrMLNode->BST_Left = NULL BSTree DelNode 60 30 PrMLNode 65 19 MLNode 40 NULL NULL 10 NULL 30 NULL 44 NULL NULL NULL NULL NULL NULL Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 180 Kết quả sau khi hủy: BSTree DelNode 60 30 PrMLNode 65 19 40 NULL NULL 10 NULL NULL 44 NULL NULL NULL NULL - Thuật toán hủy 1 nút trong cây nhò phân tìm kiếm bằng phương pháp chuyển cây con phải của nút cần hủy về thành cây con phải của cây con có nút gốc là nút phải nhất trong cây con trái của nút cần hủy (nếu nút cần hủy có đủ 02 cây con): // Tìm nút cần hủy và nút cha của nút cần hủy B1: DelNode = BSTree B2: PrDelNode = NULL B3: IF (DelNode = NULL) Thực hiện Bkt B4: IF (DelNode->Key = DelData) Thực hiện B8 B5: IF (DelNode->Key > DelData) // Chuyển sang cây con trái B5.1: PrDelNode = DelNode B5.2: DelNode = DelNode->BST_Left B5.3: OnTheLeft = True B5.4: Thực hiện B7 B6: IF (DelNode->Key < DelData) // Chuyển sang cây con phải B6.1: PrDelNode = DelNode B6.2: DelNode = DelNode->BST_Right B6.3: OnTheLeft = False B6.4: Thực hiện B7 B7: Lặp lại B3 // Chuyển các mối quan hệ của DelNode cho các nút khác B8: IF (PrDelNode = NULL) // DelNode là nút gốc // Nếu DelNode là nút lá B8.1: If (DelNode->BST_Left = NULL) and (DelNode->BST_Right = NULL) B8.1.1: BSTree = NULL B8.1.2: Thực hiện B10 // Nếu DelNode có một cây con phải B8.2: If (DelNode->BST_Left = NULL) and (DelNode->BST_Right != NULL) B8.2.1: BSTree = BSTree->BST_Right Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 181 B8.2.2: DelNode->BST_Right = NULL B8.2.3: Thực hiện B10 // Nếu DelNode có một cây con trái B8.3: If (DelNode->BST_Left != NULL) and (DelNode->BST_Right = NULL) B8.3.1: BSTree = BSTree->BST_Left B8.3.2: DelNode->BST_Left = NULL B8.3.3: Thực hiện B10 // Nếu DelNode có hai cây con B8.4: If (DelNode->BST_Left != NULL) and (DelNode->BST_Right != NULL) // Tìm nút phải nhất trong cây con trái của DelNode B8.4.1: MRNode = DelNode->BST_Left B8.4.2: if (MRNode->BST_Right = NULL) Thực hiện B8.4.5 B8.4.3: MRNode = MRNode->BST_Right B8.4.4: Lặp lại B8.4.2 // Chuyển cây con phải của DelNode về cây con phải của MRNode B8.4.5: MRNode->BST_Right = DelNode->BST_Right B8.4.6: DelNode->BST_Right = NULL // Chuyển cây con trái còn lại của DelNode về cho BSTree B8.4.7: BSTree = BSTree->BST_Left B8.4.8: DelNode->BST_Left = NULL B8.4.9: Thực hiện B10 B9: ELSE // DelNode không phải là nút gốc // Nếu DelNode là nút lá B9.1: If (DelNode->BST_Left = NULL) and (DelNode->BST_Right = NULL) // DelNode là cây con trái của PrDelNode B9.1.1: if (OnTheLeft = True) PrDelNode->BST_Left = NULL B9.1.2: else // DelNode là cây con phải của PrDelNode PrDelNode->BST_Right = NULL B9.1.3: Thực hiện B10 // Nếu DelNode có một cây con phải B9.2: If (DelNode->BST_Left = NULL) and (DelNode->BST_Right != NULL) B9.2.1: if (OnTheLeft = True) PrDelNode->BST_Left = DelNode->BST_Right B9.2.2: else PrDelNode->BST_Right = DelNode->BST_Right B9.2.3: DelNode->BST_Right = NULL B9.2.4: Thực hiện B10 // Nếu DelNode có một cây con trái B9.3: If (DelNode->BST_Left != NULL) and (DelNode->BST_Right = NULL) B9.3.1: if (OnTheLeft = True) PrDelNode->BST_Left = DelNode->BST_Left Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 182 B9.3.2: else PrDelNode->BST_Right = DelNode->BST_Left B9.3.3: DelNode->BST_Left = NULL B9.3.4: Thực hiện B10 // Nếu DelNode có hai cây con B9.4: If (DelNode->BST_Left != NULL) and (DelNode->BST_Right != NULL) // Tìm nút phải nhất trong cây con trái của DelNode B9.4.1: MRNode = DelNode->BST_Left B9.4.2: if (MRNode->BST_Right = NULL) Thực hiện B9.4.5 B9.4.3: MRNode = MRNode->BST_Right B9.4.4: Lặp lại B9.4.2 // Chuyển cây con phải DelNode về thành cây con phải MRNode B9.4.5: MRNode->BST_Right = DelNode->BST_Right B9.4.6: DelNode->BST_Right = NULL // Chuyển cây con trái còn lại của DelNode về cho PrDelNode B9.4.7: if (OnTheLeft = True) PrDelNode->BST_Left = DelNode->BST_Left B9.4.8: else PrDelNode->BST_Right = DelNode->BST_Left B9.4.9: DelNode->BST_Left = NULL B9.4.10: Thực hiện B10 // Hủy DelNode B10: delete DelNode Bkt: Kết thúc - Cài đặt thuật toán: Hàm BST_Delete_Node_TRS có prototype: int BST_Delete_Node_TRS(BST_Type &BS_Tree, T DelData); Hàm thực hiện việc hủy nút có thành phần Key là DelData trên cây nhò phân tìm kiếm BS_Tree bằng phương pháp chuyển cây con phải của nút cần hủy về thành cây con phải của cây có nút gốc là nút phải nhất trong cây con trái của nút cần hủy (nếu nút cần hủy có hai cây con). Hàm trả về giá trò 1 nếu việc hủy thành công (có nút để hủy), trong trường hợp ngược lại hàm trả về giá trò 0 (không tồn tại nút có Key là DelData hoặc cây rỗng). int BST_Delete_Node_TRS(BST_Type &BS_Tree, T DelData) { BST_Type DelNode = BS_Tree; BST_Type PrDelNode = NULL; int OnTheLeft = 0; while (DelNode != NULL) { if (DelNode->Key == DelData) break; PrDelNode = DelNode; if (DelNode->Key > DelData) Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m Click to buy NOW! P D F - X C h a n g e V i e w e r w w w . d o c u - t r a c k . c o m . . V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 179 BSTree DelNode 60 25 PrMLNode 65 19 MLNode 40 NULL NULL 10 NULL 30 44 NULL NULL NULL NULL NULL NULL Chuyển dữ liệu. Cài đặt thuật toán: Hàm BST_Delete_Node_TRS có prototype: int BST_Delete_Node_TRS(BST_Type &BS_Tree, T DelData); Hàm thực hiện việc hủy nút có thành phần Key là DelData trên cây nhò phân. V i e w e r w w w . d o c u - t r a c k . c o m . Giáo trình: Cấu Trúc Dữ Liệu và Giải Thuật Trang: 181 B8.2.2: DelNode->BST_Right = NULL B8.2.3: Thực hiện B10 // Nếu DelNode có một cây con trái B8.3: If

Ngày đăng: 06/08/2014, 06:21

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

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

Tài liệu liên quan