Giáo trình hướng dẫn dùng thuật toán thêm một nút vào bên trái nhất của cây nhị phân p2
lượt xem 5
download
Trong thao tác này chúng ta tìm cách duyệt qua (ghé thăm) tất cả các nút trong cây nhị phân để thực hiện một thao tác xử lý nào đó đối với nút này (Xem nội dung thành phần dữ liệu chẳng hạn). Căn cứ vào thứ tự duyệt nút gốc so với 2 nút gốc cây con, thao tác duyệt có thể thực hiện theo một trong ba
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Giáo trình hướng dẫn dùng thuật toán thêm một nút vào bên trái nhất của cây nhị phân p2
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o { BinT_Type NewNode = BinT_Create_Node(NewData); c u -tr a c k c u -tr a c k if (NewNode == NULL) return (NewNode); if (BT_Tree == NULL) BT_Tree = NewNode; else { BinT_Type Rnode = BT_Tree; while (Rnode->BinT_Right != NULL) Rnode = Rnode->BinT_Right; Rnode->BinT_Right = NewNode; } return (NewNode); } d. Duyeät qua caùc nuùt treân caây nhò phaân: Trong thao taùc naøy chuùng ta tìm caùch duyeät qua (gheù thaêm) taát caû caùc nuùt trong caây nhò phaân ñeå thöïc hieän moät thao taùc xöû lyù naøo ñoù ñoái vôùi nuùt naøy (Xem noäi dung thaønh phaàn döõ lieäu chaúng haïn). Caên cöù vaøo thöù töï duyeät nuùt goác so vôùi 2 nuùt goác caây con, thao taùc duyeät coù theå thöïc hieän theo moät trong ba thöù töï: - Duyeät theo thöù töï nuùt goác tröôùc (Preorder): Theo caùch duyeät naøy thì nuùt goác seõ ñöôïc duyeät tröôùc sau ñoù môùi duyeät ñeán hai caây con. Caên cöù vaøo thöù töï duyeät hai caây con maø chuùng ta coù hai caùch duyeät theo thöù töï nuùt goác tröôùc: + Duyeät nuùt goác, duyeät caây con traùi, duyeät caây con phaûi (Root – Left – Right) + Duyeät nuùt goác, duyeät caây con phaûi, duyeät caây con traùi (Root – Right - Left) - Duyeät theo thöù töï nuùt goác giöõa (Inorder): Theo caùch duyeät naøy thì chuùng ta duyeät moät trong hai caây con tröôùc roài ñeán duyeät nuùt goác vaø sau ñoù môùi duyeät caây con coøn laïi. Caên cöù vaøo thöù töï duyeät hai caây con chuùng ta cuõng seõ coù hai caùch duyeät theo thöù töï nuùt goác giöõa: + Duyeät caây con traùi, duyeät nuùt goác, duyeät caây con phaûi (Left – Root - Right) + Duyeät caây con phaûi, duyeät nuùt goác, duyeät caây con traùi (Right – Root - Left) - Duyeät theo thöù töï nuùt goác sau (Postorder): Töông töï nhö duyeät theo nuùt goác tröôùc, trong caùch duyeät naøy thì nuùt goác seõ ñöôïc duyeät sau cuøng so vôùi duyeät hai nuùt goác caây con. Do vaäy, caên cöù vaøo thöù töï duyeät hai caây con maø chuùng ta cuõng coù hai caùch duyeät theo thöù töï nuùt goác sau: + Duyeät caây con traùi, duyeät caây con phaûi, duyeät nuùt goác (Left – Right - Root) + Duyeät caây con phaûi, duyeät caây con traùi, duyeät nuùt goác (Right – Left - Root) Trong phaàn naøy chuùng ta chæ trình baøy moät caùch duyeät theo moät thöù töï cuï theå ñoù laø: Duyeät caây con traùi, duyeät nuùt goác vaø duyeät caây con phaûi (Left – Root – Right) vaø söû duïng thuaät toaùn ñeä quy. Caùc caùch duyeät khaùc baèng thuaät toaùn ñeä quy hay khoâng ñeä quy sinh vieân töï vaän duïng töông töï. - Thuaät toaùn ñeä quy ñeå duyeät caây nhò phaân theo thöù töï Left – Root – Right (LRootR): B1: CurNode = BinTree Trang: 158
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o B2: IF (CurNode = NULL) c u -tr a c k c u -tr a c k Thöïc hieän Bkt B3: LRootR (BinTree->BinT_Left) // Duyeät caây con traùi B4: Process (CurNode->Key) // Xöû lyù thoâng tin nuùt goác B5: LRootR (BinTree->BinT_Right) // Duyeät caây con phaûi Bkt: Keát thuùc - Minh hoïa thuaät toaùn: Giaû söû chuùng ta caàn duyeät qua caùc nuùt trong caây nhò phaân döôùi ñaây theo thöù töï Left – Root – Right: BinTree 40 36 55 12 18 45 21 NULL NULL NULL NULL 10 8 NULL NULL NULL NULL 11 5 NULL NULL NULL NULL LRootR(BinTree->BinT_Left) LRootR(BinTree->BinT_Left->BinT_Left) LRootR(NULL) Process(12) LRootR(NULL) Process(36) LRootR(BinTree->BinT_Left->BinT_Right) LRootR(NULL) Process(18) LRootR(NULL) Process(40) LRootR(BinTree->BinT_Right) LRootR(BinTree->BinT_Right->BinT_Left) LRootR(BinTree->BinT_Right->BinT_Left->BinT_Left) LRootR(NULL) Process(10) LRootR(NULL) Trang: 159
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o Process(45) c u -tr a c k c u -tr a c k LRootR(BinTree->BinT_Right->BinT_Left->BinT_Right) LRootR(BinTree->BinT_Right->BinT_Left->BinT_Right->BinT_Left) LRootR(NULL) Process(11) LRootR(NULL) Process(8) LRootR(BinTree->BinT_Right->BinT_Left->BinT_Right->BinT_Right) LRootR(NULL) Process(5) LRootR(NULL) Process(55) LRootR(BinTree->BinT_Right->BinT_Right) LRootR(NULL) Process(21) LRootR(NULL) Nhö vaäy thöù töï caùc thoâng tin cuûa caùc nuùt ñöôïc xöû lyù nhö sau: 12 -> 36 -> 18 -> 40 -> 10 -> 45 -> 11 -> 8 -> 5 -> 55 -> 21 - Caøi ñaët thuaät toaùn: Haøm BinT_LRootR_Travelling coù prototype: void BinT_LRootR_Travelling(BinT_Type BT_Tree); Haøm thöïc hieän thao taùc duyeät qua taát caû caùc nuùt trong caây nhò phaân BT_Tree theo thöù töï duyeät Left – Root – Right ñeå xöû lyù thoâng tin ôû moãi nuùt. void BinT_LRootR_Travelling(BinT_Type BT_Tree) { if (BT_Tree == NULL) return; BinT_LRootR_Travelling (BT_Tree->BinT_Left); Process (BT_Tree->Key) BinT_LRootR_Travelling (BT_Tree->BinT_Right); return; } Löu yù: Haøm Process thöïc hieän vieäc xöû lyù thoâng tin (Key) cuûa moãi nuùt. Do vaäy tuøy töøng tröôøng hôïp cuï theå maø chuùng ta vieát haøm cho phuø hôïp. Chaúng haïn ñeå xuaát thoâng tin thì chæ caàn caùc leänh xuaát döõ lieäu ñeå xuaát thaønh phaàn Key. e. Tính chieàu cao cuûa caây: Ñeå tính chieàu cao cuûa caây (TH) chuùng ta phaûi tính chieàu cao cuûa caùc caây con, khi ñoù chieàu cao cuûa caây chính laø chieàu cao lôùn nhaát cuûa caùc caây con coäng theâm 1 (chieàu cao nuùt goác). Nhö vaäy thao taùc tính chieàu cao cuûa caây laø thao taùc tính ñeä quy chieàu cao cuûa caùc caây con (chieàu cao cuûa caây con coù goác laø nuùt laù baèng 1). - Thuaät toaùn: Trang: 160
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o B1: IF (BinTree = NULL) c u -tr a c k c u -tr a c k B1.1: TH = 0 B1.2: Thöïc hieän Bkt B2: THL = TH(BinTree->BinT_Left) B3: THR = TH(BinTree->BinT_Right) B4: IF (THL > THR) TH = THL + 1 B5: ELSE TH = THR + 1 Bkt: Keát thuùc Ví duï: Chieàu cao cuûa caây nhò phaân sau baèng 4. BinTree 40 36 55 2 4 12 18 3 45 21 1 1 2 1 0 NULL 0 NULL 0 NULL 0 NULL 0 NULL 8 0 NULL 0 NULL 1 0 NULL 0 NULL - Caøi ñaët thuaät toaùn: Haøm BinT_Height coù prototype: int BinT_Height(BinT_Type BTree); Haøm tính chieàu cao cuûa caây BTree theo thuaät toaùn ñeä quy. Haøm traû veà chieàu cao cuûa caây caàn tính. int BinT_Height(BinT_Type BTree) { if (BTree == NULL) return (0); int HTL = BinT_Height(BTree->BinT_Left); int HTR = BinT_Height(BTree->BinT_Right); if (HTL > HTR) return (HTL+1); return (HTR+1); } f. Tính soá nuùt cuûa caây: Töông töï nhö tính chieàu cao cuûa caây, soá nuùt cuûa caây (NN) baèng toång soá nuùt cuûa hai caây con coäng theâm 1. Do vaäy thao taùc naøy chuùng ta cuõng seõ tính ñeä quy soá nuùt cuûa caùc caây con (soá nuùt cuûa caây con coù goác laø nuùt laù baèng 1). Trang: 161
- h a n g e Vi h a n g e Vi XC XC e e F- F- w w PD PD er er ! ! W W O O N N y y bu bu to to Giaùo trình: Caáu Truùc Döõ Lieäu vaø Giaûi Thuaät k k lic lic C C w w m m w w w w o o .c .c .d o .d o - Thuaät toaùn: c u -tr a c k c u -tr a c k B1: IF (BinTree = NULL) B1.1: NN = 0 B1.2: Thöïc hieän Bkt B2: NNL = NN(BinTree->BinT_Left) B3: NNR = NN(BinTree->BinT_Right) B4: NN = NNL + NNR + 1 Bkt: Keát thuùc Ví duï: Soá nuùt cuûa caây nhò phaân sau baèng 8. BinTree 40 36 55 12 18 45 21 NULL NULL NULL NULL NULL 8 NULL NULL 0 0 0 0 0 0 0 1(0+0+1) 1 (0+0+1) NULL NULL 1 (0+0+1) 3 (1+1+1) 0 0 1 (0+0+1) 2 (0+1+1) 4 (2+1+1) 8 (3+4+1) - Caøi ñaët thuaät toaùn: Haøm BinT_Num_Node coù prototype: int BinT_Num_Node(BinT_Type BTree); Haøm tính soá nuùt cuûa caây BTree theo thuaät toaùn ñeä quy. Haøm traû veà soá nuùt cuûa caây caàn tính. int BinT_Num_Node(BinT_Type BTree) { if (BTree == NULL) return (0); int NNL = BinT_Num_Node(BTree->BinT_Left); int NNR = BinT_Num_Node(BTree->BinT_Right); return (NNL + NNR + 1); } g. Huûy moät nuùt treân caây nhò phaân: Vieäc huûy moät nuùt trong caây coù theå laøm cho caây trôû thaønh röøng. Do vaäy trong thao taùc naøy neáu chuùng ta tieán haønh huûy moät nuùt laù thì khoâng coù ñieàu gì xaûy ra, song neáu huûy Trang: 162
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo trình Hướng dẫn nghiệp vụ buồng phòng - CĐ Kỹ thuật Khách sạn và Du lịch
151 p | 236 | 28
-
Giáo trình hướng dẫn phân tích ứng dụng quy trình tự động hóa với khối xử lý vi mạch tần số p6
12 p | 97 | 14
-
Giáo trình hướng dẫn phân tích ứng dụng quy trình tự động hóa với khối xử lý vi mạch tần số p7
12 p | 78 | 13
-
Giáo trình Hướng dẫn giải bài tập Cơ kỹ thuật 2 (Phần Động học)
49 p | 170 | 9
-
Giáo trình hướng dẫn tổng quan về role số sử dụng bộ vi xử lý trong bộ phận truyền chuyển động p3
13 p | 89 | 8
-
Giáo trình hướng dẫn phân tích tổng quan về role số sử dụng bộ vi xử lý truyền chuyển động p5
13 p | 77 | 8
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p2
5 p | 72 | 7
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p10
5 p | 99 | 7
-
Giáo trình hướng dẫn phân tích tổng quan về role số sử dụng bộ vi xử lý truyền chuyển động p3
13 p | 87 | 6
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p4
5 p | 71 | 6
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p9
5 p | 79 | 6
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p7
5 p | 78 | 5
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p6
5 p | 79 | 5
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p8
5 p | 74 | 3
-
Giáo trình hướng dẫn ứng dụng cấu tạo tiết diện liên hợp ảnh hưởng từ biến của bê tông p1
5 p | 73 | 3
-
Giáo trình hướng dẫn phân tích đặc tính kỹ thuật của bộ cánh khuấy trong hệ số truyền nhiệt p5
5 p | 100 | 3
-
Giáo trình Hướng dẫn thực tập công nhân (Ngành: Công nghệ kỹ thuật vật liệu xây dựng - Cao đẳng) - Trường Cao đẳng Xây dựng số 1
26 p | 4 | 1
-
Giáo trình Hướng dẫn đồ án tốt nghiệp (Ngành: Công nghệ kỹ thuật vật liệu xây dựng - Cao đẳng) - Trường Cao đẳng Xây dựng số 1
46 p | 6 | 1
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn