Xem mẫu

  1. 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 GiáoinT_Type hướng dẫn dùngBTree) toán thêm một nút B trình BinT_Initialize (BinT_Type & thuật o o .c .c .d o .d o c u -tr a c k c u -tr a c k { BTree = NULL; vào bên trái nhất của cây nhị phân return (BTree); } b. Taïo môùi moät nuùt: Thao taùc naøy hoaøn toaøn töông töï nhö ñoái vôùi thao taùc taïo môùi moät nuùt trong danh saùch lieân keát ñoâi. Giaû söû chuùng ta caàn taïo môùi moät nuùt coù thaønh phaàn döõ lieäu laø NewData. - Thuaät toaùn: B1: BTNode = new BinT_OneNode B2: IF (BTNode = NULL) Thöïc hieän Bkt B3: BTNode->BinT_Left = NULL B4: BTNode->BinT_Right = NULL B5: BTNode->Key = NewData Bkt: Keát thuùc - Caøi ñaët thuaät toaùn: Haøm BinT_Create_Node coù prototype: BinT_Type BinT_Create_Node(T NewData); Haøm taïo môùi moät nuùt coù thaønh phaàn döõ lieäu laø NewData, haøm traû veà con troû troû tôùi ñòa chæ cuûa nuùt môùi taïo. Neáu khoâng ñuû boä nhôù ñeå taïo, haøm traû veà con troû NULL. BinT_Type BinT_Create_Node(T NewData) { BinT_Type BTnode = new BinT_OneNode; if (BTnode != NULL) { BTnode->BinT_Left = NULL; BTnode->BinT_Right = NULL; BTnode->Key = NewData; } return (BTnode); } - Minh hoïa thuaät toaùn: Giaû söû chuùng ta caàn taïo nuùt coù thaønh phaàn döõ lieäu laø 30: NewData = 30 BTnode = new BinT_OneNode BTnode BTnode->BinT_Left = NULL BTnode->BinT_Right = NULL Trang: 153
  2. 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 BTnode->Key = NewData c u -tr a c k c u -tr a c k BTnode 30 NULL NULL c. Theâm moät nuùt vaøo trong caây nhò phaân: Giaû söû chuùng ta caàn theâm moät nuùt coù giaù trò thaønh phaàn döõ lieäu laø NewData vaøo trong caây nhò phaân. Vieäc theâm coù theå dieãn ra ôû caây con traùi hoaëc caây con phaûi cuûa caây nhò phaân. Do vaäy, ôû ñaây chuùng ta trình baøy 2 thao taùc theâm rieâng bieät nhau: - Thuaät toaùn theâm 1 nuùt vaøo beân traùi nhaát cuûa caây: B1: NewNode = BinT_Create_Node (NewData) B2: IF (NewNode = NULL) Thöïc hieän Bkt B3: IF (BinTree = NULL) // Caây roãng B3.1: BinTree = NewNode B3.2: Thöïc hieän Bkt B4: Lnode = BinTree B5: IF (Lnode->BinT_Left = NULL) // Caây con traùi roãng B5.1: Lnode->BinT_Left = NewNode B5.2: Thöïc hieän Bkt B6: Lnode = Lnode->BinT_Left // Ñi theo nhaùnh caây con traùi B7: Laëp laïi B5 Bkt: Keát thuùc - Minh hoïa thuaät toaùn: Giaû söû chuùng ta caàn theâm nuùt coù thaønh phaàn döõ lieäu laø 17 vaøo beân traùi nhaát cuûa caây nhò phaân: NewData = 17 NewNode BinTree 17 20 NULL NULL Lnode 25 45 19 16 NULL NULL NULL NULL 30 21 NULL NULL NULL NULL Trang: 154
  3. 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 B5.1: Lnode->BinT_Left = NewNode c u -tr a c k c u -tr a c k NewNode BinTree 17 20 NULL NULL Lnode 25 45 19 16 NULL NULL NULL 30 21 NULL NULL NULL NULL Keát quaû sau khi theâm: BinTree 20 Lnode 25 45 NewNode 19 16 NULL NULL 17 NULL 30 21 NULL NULL NULL NULL NULL NULL - Caøi ñaët thuaät toaùn: Haøm BinT_Add_Left coù prototype: BinT_Type BinT_Add_Left(BinT_Type &BT_Tree, T NewData); Haøm thöïc hieän vieäc theâm vaøo beân traùi nhaát trong caây nhò phaân BT_Tree moät nuùt coù thaønh phaàn döõ lieäu laø NewData, haøm traû veà con troû troû tôùi ñòa chæ cuûa nuùt môùi theâm neáu vieäc theâm thaønh coâng, ngöôïc laïi neáu khoâng ñuû boä nhôù, haøm traû veà con troû NULL. BinT_Type BinT_Add_Left(BinT_Type &BT_Tree, T NewData) { BinT_Type NewNode = BinT_Create_Node(NewData); if (NewNode == NULL) return (NewNode); if (BT_Tree == NULL) Trang: 155
  4. 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 BT_Tree = NewNode; c u -tr a c k c u -tr a c k else { BinT_Type Lnode = BT_Tree; while (Lnode->BinT_Left != NULL) Lnode = Lnode->BinT_Left; Lnode->BinT_Left = NewNode; } return (NewNode); } - Thuaät toaùn theâm 1 nuùt vaøo beân phaûi nhaát cuûa caây nhò phaân: B1: NewNode = BinT_Create_Node (NewData) B2: IF (NewNode = NULL) Thöïc hieän Bkt B3: IF (BinTree = NULL) // Caây roãng B3.1: BinTree = NewNode B3.2: Thöïc hieän Bkt B4: Rnode = BinTree B5: IF (Rnode->BinT_Right = NULL) // Caây con phaûi roãng B5.1: Rnode->BinT_Right = NewNode B5.2: Thöïc hieän Bkt B6: Rnode = Rnode->BinT_Right // Ñi theo nhaùnh caây con phaûi B7: Laëp laïi B5 Bkt: Keát thuùc - Minh hoïa thuaät toaùn: Giaû söû chuùng ta caàn theâm nuùt coù thaønh phaàn döõ lieäu laø 21 vaøo beân phaûi nhaát cuûa caây nhò phaân: NewData = 21 BinTree NewNode 40 Rnode 21 36 55 NULL NULL 12 18 45 NULL NULL NULL NULL NULL 10 8 NULL NULL 11 5 NULL NULL NULL NULL Trang: 156
  5. 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 B5.1: Rnode->BinT_Right = NewNode c u -tr a c k c u -tr a c k BinTree NewNode 40 Rnode 21 36 55 NULL NULL 12 18 45 NULL NULL NULL NULL NULL 10 8 NULL NULL 11 5 NULL NULL NULL NULL Keát quaû sau khi theâm: BinTree 40 Rnode 36 55 NewNode 12 18 45 21 NULL NULL NULL NULL 10 8 NULL NULL NULL NULL 11 5 NULL NULL NULL NULL - Caøi ñaët thuaät toaùn: Haøm BinT_Add_Right coù prototype: BinT_Type BinT_Add_Right(BinT_Type &BT_Tree, T NewData); Haøm thöïc hieän vieäc theâm vaøo beân phaûi nhaát trong caây nhò phaân BT_Tree moät nuùt coù thaønh phaàn döõ lieäu laø NewData, haøm traû veà con troû troû tôùi ñòa chæ cuûa nuùt môùi theâm neáu vieäc theâm thaønh coâng, ngöôïc laïi neáu khoâng ñuû boä nhôù, haøm traû veà con troû NULL. BinT_Type BinT_Add_Right(BinT_Type &BT_Tree, T NewData) Trang: 157
nguon tai.lieu . vn