1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [Artikulua 7] [Less erosoa] 2 00:00:02,500 --> 00:00:04,890 [Nate Hardison] [Harvardeko Unibertsitateko] 3 00:00:04,890 --> 00:00:07,000 [Hau da CS50.] [CS50.TV] 4 00:00:07,000 --> 00:00:09,080 >> Ongi etorri artikulua 7. 5 00:00:09,080 --> 00:00:11,330 Urakanak Sandy esker, 6 00:00:11,330 --> 00:00:13,440 Horren ordez, aste honetan normal atal bat izatea, 7 00:00:13,440 --> 00:00:17,650 egiten ari gara oinez-bidez, galdera atalaren bitartez. 8 00:00:17,650 --> 00:00:22,830 Jarraituz batera Problema Ezarri 6 espezifikazioa noa, 9 00:00:22,830 --> 00:00:25,650 eta galdera guztiak igaro 10 00:00:25,650 --> 00:00:27,770 Galdera atal artikulua. 11 00:00:27,770 --> 00:00:30,940 Daude, zalantzarik izanez gero, 12 00:00:30,940 --> 00:00:32,960 mesedez post hauek CS50 eztabaidatzeko. 13 00:00:32,960 --> 00:00:35,480 >> Bale. Dezagun Hasteko. 14 00:00:35,480 --> 00:00:40,780 Oraintxe 3 Arazoa Set espezifikazioa nabil. 15 00:00:40,780 --> 00:00:44,110 Lehen hasteko zuhaitz bitar buruz hitz egiten ari gara. 16 00:00:44,110 --> 00:00:47,850 horiek aste honetan arazo multzo garrantzi asko aurrera 17 00:00:47,850 --> 00:00:49,950 Huffman Tree kodeketa. 18 00:00:49,950 --> 00:00:55,000 Datuak oso egitura lehen buruz hitz egin dugu CS50 array izan zen. 19 00:00:55,000 --> 00:01:00,170 Gogoratu array bat da elementuen sekuentzia bat 20 00:01:00,170 --> 00:01:04,019 berean mota guztiak - memorian gordetzen eskubidea bata bestearen ondoan. 21 00:01:04,019 --> 00:01:14,420 Daukat osoko array kutxak-zenbakiak-zenbaki osoko estilo hau erabiltzen dut marraz dezakete 22 00:01:14,420 --> 00:01:20,290 Demagun 5 daukat lehen koadroan, 7 daukat, bigarrenean, 23 00:01:20,290 --> 00:01:27,760 ondoren, 8, 10, eta 20 azken koadroan daukat. 24 00:01:27,760 --> 00:01:33,000 Gogoan izan, bi buruz array honetan gauza benetan ona 25 00:01:33,000 --> 00:01:38,800 dira bereziki edozein elementu sarrera konstante-denbora honetan izan dugun 26 00:01:38,800 --> 00:01:40,500  array ezagutzen dugu bere indizea. 27 00:01:40,500 --> 00:01:44,670 Esate baterako, nahi badut array hirugarren elementu har - 28 00:01:44,670 --> 00:01:47,870 indizea 2 gure zero-oinarritutako indexatzeko sistema erabiliz 29 00:01:47,870 --> 00:01:52,220 Besterik ez literalki kalkulatzeko matematiko sinple bat egin dut, 30 00:01:52,220 --> 00:01:56,170 posizio hori array hop, 31 00:01:56,170 --> 00:01:57,840 tira han gordetzen den 8, 32 00:01:57,840 --> 00:01:59,260 eta onak joan naiz. 33 00:01:59,260 --> 00:02:03,350 >> Array honi buruz, gauza txarrak - buruz hitz egin zuen 34 00:02:03,350 --> 00:02:05,010 lotuta zerrendak aztertu ditugu 35 00:02:05,010 --> 00:02:09,120 array honetan sartzeko elementu bat sartu nahi badut, 36 00:02:09,120 --> 00:02:11,090 Batzuk inguruan aldatzearen egin behar dut. 37 00:02:11,090 --> 00:02:12,940 Esate baterako, array eskubide hau hemen 38 00:02:12,940 --> 00:02:16,850 ordena ordenatuko da, ordena gorakorrean antolatuta 39 00:02:16,850 --> 00:02:19,440 5, ondoren, 7, 8 eta, ondoren, 10, eta, ondoren, 20 - 40 00:02:19,440 --> 00:02:23,100 baina kopurua 9 array honetan sartu sartu nahi dut, 41 00:02:23,100 --> 00:02:27,460 Elementu batzuk mugitzeko ordena espazio egin izan dut. 42 00:02:27,460 --> 00:02:30,440 Marraztu ahal izango dugu hemen. 43 00:02:30,440 --> 00:02:35,650 5, 7 eraman behar izan dut, eta, ondoren, 8; 44 00:02:35,650 --> 00:02:38,720 hutsune bat sortzeko, non 9 jarri ahal izango dut, 45 00:02:38,720 --> 00:02:45,910 eta, ondoren, 10 eta 20 9 eskubidea. 46 00:02:45,910 --> 00:02:49,450 Mina baten antzeko zerbait da, izan ere, kasurik txarrenean - 47 00:02:49,450 --> 00:02:54,350 txertatzeko ari gara bai hasieran edo amaieran 48 00:02:54,350 --> 00:02:56,040 array, nola arabera aldatzearen ari gara 49 00:02:56,040 --> 00:02:58,850 azkenean baliteke elementu guztiak mugitzeko beharrik 50 00:02:58,850 --> 00:03:00,750 ari gara gaur egun array gordetzeko. 51 00:03:00,750 --> 00:03:03,810 >> Beraz, zer modu honen inguruan? 52 00:03:03,810 --> 00:03:09,260 Honen inguruan izan da gure lotutako zerrenda metodoa non joan 53 00:03:09,260 --> 00:03:19,820 elementu 5, 7, 8, 10, eta 20 guztiak bata bestearen ondoan memoria gordetzeko ordez - 54 00:03:19,820 --> 00:03:25,630 zer egin ordez dugu gorde zen lekuan gorde nahi izan dugu, mota 55 00:03:25,630 --> 00:03:32,470 horiek lotutako nodo zerrenda out naiz marrazten hemen, mota ad hoc. 56 00:03:32,470 --> 00:03:42,060 Eta gero konektatutako dugu elkarrekin erakusleak hurrengo hauek erabiliz. 57 00:03:42,060 --> 00:03:44,370 5 etatik 7 erakuslea izan dezaket, 58 00:03:44,370 --> 00:03:46,420 7 8 erakuslea, 59 00:03:46,420 --> 00:03:47,770 8 10 erakuslea, 60 00:03:47,770 --> 00:03:51,220 eta, azkenik, 10-tik 20-erakuslea, 61 00:03:51,220 --> 00:03:54,880 eta, ondoren, 20. erakuslea null ez dagoela ezer ez ezker adieraziz. 62 00:03:54,880 --> 00:03:59,690 Merkataritza-off hemen dugu 63 00:03:59,690 --> 00:04:05,360 gaur egun kopurua 9 sartu nahi dugu gure zerrendan horrela antolatu bada, 64 00:04:05,360 --> 00:04:08,270 guztiak egin behar dugu sortu nodo berria 9, 65 00:04:08,270 --> 00:04:12,290 Wire da leku egokia seinalatu 66 00:04:12,290 --> 00:04:20,630 eta, ondoren, alanbre-re-8 behera seinalatu 9. 67 00:04:20,630 --> 00:04:25,660 Hau da, nahiko azkar, zehatz-mehatz ezagutzen dugu 9 txertatu nahi dugu non suposatuz. 68 00:04:25,660 --> 00:04:32,610 Baina horren truke merkataritza-off da, gaur egun galdu ditudan konstante-time sarbidea 69 00:04:32,610 --> 00:04:36,230 gure datu-egitura bereziki edozein elementu. 70 00:04:36,230 --> 00:04:40,950 Esate baterako, nahi dut laugarren elementu aurkitu lotutako zerrenda honetan, 71 00:04:40,950 --> 00:04:43,510 Zerrendaren hasiera-hasieratik hasi beharko dut 72 00:04:43,510 --> 00:04:48,930 eta lan nire nodo nodo-kontatuta bidez aurkitu dut laugarren bat arte. 73 00:04:48,930 --> 00:04:55,870 >> Sarbidea hobeto lotuta zerrenda baino performance - 74 00:04:55,870 --> 00:04:59,360 baina baita ere onurak izan dugu batzuk mantenduko 75 00:04:59,360 --> 00:05:01,800 Txertatze-denbora terminoak lotuta zerrenda - 76 00:05:01,800 --> 00:05:05,750 bitarra zuhaitz bat da, apur bat memoria gehiago erabili behar du. 77 00:05:05,750 --> 00:05:11,460 Hain zuzen ere, horren ordez,, zuhaitz bitar nodo bakar bat erakuslea izatea - 78 00:05:11,460 --> 00:05:13,350 lotutako zerrenda bezalako nodo ez 79 00:05:13,350 --> 00:05:16,950 bigarren erakuslea zuhaitz bitar nodo bat gehitzeko goaz. 80 00:05:16,950 --> 00:05:19,950 Baino erakuslea bat izatea hurrengo elementu 81 00:05:19,950 --> 00:05:24,420 ezker haur eta eskuineko haur baten erakuslea izan dugu. 82 00:05:24,420 --> 00:05:26,560 >> Dezagun irudi bat marraztuko zer esan benetan itxura ikusteko. 83 00:05:26,560 --> 00:05:31,350 Berriz ere, kutxak eta geziak horiek erabili dut. 84 00:05:31,350 --> 00:05:37,150 Zuhaitz bitarra nodo hasiko da kutxa sinple bat besterik ez. 85 00:05:37,150 --> 00:05:40,940 Balioa espazio bat izan da, 86 00:05:40,940 --> 00:05:47,280 eta gero ere Umearen ezkerreko eta eskuineko haurraren espazio bat izan behar da. 87 00:05:47,280 --> 00:05:49,280 Etiketatuko hemen noa. 88 00:05:49,280 --> 00:05:57,560 Ezkerraldean seme-alaba izan gara, eta, ondoren, eskuineko seme-alaba izan dugu. 89 00:05:57,560 --> 00:05:59,920 Asko daude hau egiteko modu desberdinak. 90 00:05:59,920 --> 00:06:02,050 Batzuetan espazioa eta erosotasuna, 91 00:06:02,050 --> 00:06:06,460 Actually dut marraztu dut hemen behean bezala egiten 92 00:06:06,460 --> 00:06:10,910 non goialdean balioa izan dut, 93 00:06:10,910 --> 00:06:14,060 eta, ondoren, eskuineko beheko-eskuineko haur, 94 00:06:14,060 --> 00:06:16,060 eta ezkerreko beheko-ezkerreko haur. 95 00:06:16,060 --> 00:06:20,250 Goiko diagrama honetan atzera eginez, 96 00:06:20,250 --> 00:06:22,560 balioa dugu, oso goian, 97 00:06:22,560 --> 00:06:25,560 ondoren, ezkerreko eta seme-alaben erakuslea dugu, eta, ondoren, seme-alaben eskuineko erakuslea dugu. 98 00:06:25,560 --> 00:06:30,110 >> Arazoa Set espezifikazioa, 99 00:06:30,110 --> 00:06:33,110 7 balioa du nodo batek marrazten buruz hitz egiten dugu, 100 00:06:33,110 --> 00:06:39,750 eta, ondoren, seme-alaben ezkerreko erakuslea null da, eta seme-alaben eskubidea erakuslea null da. 101 00:06:39,750 --> 00:06:46,040 Bai idatzi ahal izango dugu hiriburua NULL espazioa 102 00:06:46,040 --> 00:06:51,610 bai ezkerreko haur eta eskuineko seme-alaba, edo diagonal barrarik marraztuko 103 00:06:51,610 --> 00:06:53,750 dela koadroen bitartez null adierazteko. 104 00:06:53,750 --> 00:06:57,560 Besterik ez delako hori errazagoa egin dut. 105 00:06:57,560 --> 00:07:03,700 Hemen ikusten duzun oso erraza binary zuhaitz nodo diagramming bi modu 106 00:07:03,700 --> 00:07:07,960 non balioa 7 eta null seme-erakusle dugu. 107 00:07:07,960 --> 00:07:15,220 >> Gure zehaztapen zerrendak lotuta buruz hitz egiten du bigarren zatia - 108 00:07:15,220 --> 00:07:18,270 gogoan, izan besterik ez dugu eduki elementu oso lehen zerrenda batean 109 00:07:18,270 --> 00:07:20,270 zerrenda osoa gogoratzeko 110 00:07:20,270 --> 00:07:26,140 eta, era berean, zuhaitz bitar bat, besterik ez dugu eduki bat erakuslea zuhaitz 111 00:07:26,140 --> 00:07:31,120 , datu egitura osoa gaineko kontrola mantentzeko. 112 00:07:31,120 --> 00:07:36,150 Erroko nodoa izeneko zuhaitza zuhaitzaren elementu berezi hori. 113 00:07:36,150 --> 00:07:43,360 Adibidez, nodo bat bada - 7 balioa duen nodoa 114 00:07:43,360 --> 00:07:45,500 ezkerreko eta eskuineko seme-alaben null erakusleak 115 00:07:45,500 --> 00:07:47,360 gure zuhaitz balio bakarra izan ziren, 116 00:07:47,360 --> 00:07:50,390 ondoren, hauxe da gure erroko nodoa izango litzateke. 117 00:07:50,390 --> 00:07:52,240 Gure zuhaitz hasieran oso da. 118 00:07:52,240 --> 00:07:58,530 Pixka bat ikusi ahal izango dugu argiago hasten gara gure zuhaitz nodo gehiago gehituz behin. 119 00:07:58,530 --> 00:08:01,510 Tira me orri berri bat. 120 00:08:01,510 --> 00:08:05,000 >> Orain duen erro 7 zuhaitz bat marraztu dugu, 121 00:08:05,000 --> 00:08:10,920 eta 3 seme-alaba ezkerrera, eta eskuineko haurraren barruan 9 barruan. 122 00:08:10,920 --> 00:08:13,500 Berriz ere, hau da, nahiko sinplea da. 123 00:08:13,500 --> 00:08:26,510 Dugu got 7, marraztu 3 nodoa, 9 nodo 124 00:08:26,510 --> 00:08:32,150 eta ezkerreko erakuslea 7 seme-alaben 3 nodo duten seinalatu ezartzeko noa, 125 00:08:32,150 --> 00:08:37,850 eta 7 9 duten nodo nodo seme-alaben eskuineko erakuslea. 126 00:08:37,850 --> 00:08:42,419 Orain, 3 eta 9 geroztik ez dute seme-alabak edozein 127 00:08:42,419 --> 00:08:48,500 beren seme-alaba erakusleak guztiak ezarri null izango dugu. 128 00:08:48,500 --> 00:08:56,060 Hemen, gure zuhaitz sustraia nodo kopurua 7 duten dagokio. 129 00:08:56,060 --> 00:09:02,440 Horretan dugun guztia ikusi ahal izango duzu root nodo horretan erakuslea bada, 130 00:09:02,440 --> 00:09:07,330 gure zuhaitz ibiltzeko aukera izango dugu, orduan eta bi seme-alaba nodo sartzeko 131 00:09:07,330 --> 00:09:10,630 bai 3 eta 9. 132 00:09:10,630 --> 00:09:14,820 No behar zuhaitza nodo bakar behin erakusleak mantentzeko. 133 00:09:14,820 --> 00:09:22,080 Bale. Nodoa beste diagrama hau gehitzeko goaz. 134 00:09:22,080 --> 00:09:25,370 6 duten nodo bat gehitzeko ari gara, 135 00:09:25,370 --> 00:09:34,140 eta hau gehitzeko nodo 3 duten eskubidea seme-alaba gisa ari dugu. 136 00:09:34,140 --> 00:09:41,850 Horretarako, 3-nodo null erakuslea ezabatu noa 137 00:09:41,850 --> 00:09:47,750 eta Wire nodo 6 duten seinalatu. Bale. 138 00:09:47,750 --> 00:09:53,800 >> Puntu honetan, dezagun terminologia pixka bat baino gehiago joan. 139 00:09:53,800 --> 00:09:58,230 Hasteko, arrazoi hori deitzen da, bereziki, zuhaitz bitar bat 140 00:09:58,230 --> 00:10:00,460 da, bi seme-alaba erakusleak. 141 00:10:00,460 --> 00:10:06,020 Badira beste seme-alaba gehiago izan erakusleak zuhaitz mota. 142 00:10:06,020 --> 00:10:10,930 Hain zuzen ere, 'saiatu' Arazoa Set 5 egin duzu. 143 00:10:10,930 --> 00:10:19,310 Saiatu egiten dela nabarituko duzu, 27 seme-alabak hainbat erakusle izan - 144 00:10:19,310 --> 00:10:22,410 English alfabetoa 26 letrak bakoitzeko bat, 145 00:10:22,410 --> 00:10:25,410 eta, ondoren, apostrophe, 27an - 146 00:10:25,410 --> 00:10:28,900 beraz, zuhaitz mota bat antzekoa da. 147 00:10:28,900 --> 00:10:34,070 Baina, hemen, bere bitar geroztik, besterik ez dugu bi seme-alaba erakusleak. 148 00:10:34,070 --> 00:10:37,880 >> Hitz egiten dugun hau erroko nodoa gain, 149 00:10:37,880 --> 00:10:41,470 dugu, halaber, epe horren inguruan 'seme-alaba' bota 150 00:10:41,470 --> 00:10:44,470 Zer esan nahi du nodo nodo beste seme-alaba bat izatea esan nahi du? 151 00:10:44,470 --> 00:10:54,060 Esan nahi du literalki nodo umea nodoa beste ume bat da 152 00:10:54,060 --> 00:10:58,760 beste nodo hori bada bere seme-alaba nodo hori seinalatu erakusle bat. 153 00:10:58,760 --> 00:11:01,230 Hormigoizko gehiago terminoak jarri, 154 00:11:01,230 --> 00:11:11,170 3 azpimarratu nahi izanez gero 7-erakusleak ume bat, eta 3 seme-alaba 7. 155 00:11:11,170 --> 00:11:14,510 Izan dugu irudikatu zer diren 7 seme-alabak izanez gero - 156 00:11:14,510 --> 00:11:18,510 ondo, 7 erakuslea 3 eta 9 erakuslea bat ikusiko dugu, 157 00:11:18,510 --> 00:11:22,190 beraz, 9 eta 3, 7 seme-alabak dira. 158 00:11:22,190 --> 00:11:26,650 Bederatzi ez du seme-alaba, bere seme-alaba erakusle dira null delako, 159 00:11:26,650 --> 00:11:30,940 eta 3 seme-alabaren bat, 6 ditu. 160 00:11:30,940 --> 00:11:37,430 Sei ere ez du seme-alabak bere erakusleak biak null, marrazteko oraintxe dugu delako. 161 00:11:37,430 --> 00:11:45,010 >> Horrez gain, gurasoek jakin baten nodo buruz ere hitz egin dugu, 162 00:11:45,010 --> 00:11:51,100 eta hau da, espero duzun bezala, deskribapen hau umearen atzealdean. 163 00:11:51,100 --> 00:11:58,620 Ordez bi duzun gizakiak espero dezake - nodo bakoitzak guraso bakarra du. 164 00:11:58,620 --> 00:12:03,390 Esate baterako, 3 gurasoaren 7. 165 00:12:03,390 --> 00:12:10,800 9-gurasoa ere bada, 7, eta 6 gurasoaren 3. Ez da askoz ere. 166 00:12:10,800 --> 00:12:15,720 Era berean, termino, aiton-amonen eta biloben buruz hitz egin dugu, 167 00:12:15,720 --> 00:12:18,210 eta, oro har arbasoen buruz hitz egiten dugu 168 00:12:18,210 --> 00:12:20,960 eta nodo jakin baten ondorengoak. 169 00:12:20,960 --> 00:12:25,710 Nodo bat - arbaso edo arbasoen, baizik eta, nodo bat - 170 00:12:25,710 --> 00:12:32,730 erro bidea nodo hori gezurra nodo guztiak. 171 00:12:32,730 --> 00:12:36,640 Esate baterako, naiz nodo 6 begiratuz gero, 172 00:12:36,640 --> 00:12:46,430 gero, arbasoen bai 3 eta 7 izango dira. 173 00:12:46,430 --> 00:12:55,310 9 arbasoak dira, adibidez, - naiz nodo 9 begiratuz gero - 174 00:12:55,310 --> 00:12:59,990 gero, arbaso 9 7 besterik ez da. 175 00:12:59,990 --> 00:13:01,940 Eta ondorengoak dira hain zuzen ere alderantziz. 176 00:13:01,940 --> 00:13:05,430 Nahi dut 7 ondorengoak begiratuz gero, 177 00:13:05,430 --> 00:13:11,020 azpian nodo guztiak begiratu behar dut. 178 00:13:11,020 --> 00:13:16,950 Beraz, 3, 9, eta 6 guztiak 7 ondorengoak gisa daukat. 179 00:13:16,950 --> 00:13:24,170 >> Final epe buruz hitz egingo dugun anaia bat izatearen ideia da. 180 00:13:24,170 --> 00:13:27,980 Anai-arrebak batera familiaren baldintza hauek mota 181 00:13:27,980 --> 00:13:33,150 zuhaitzaren maila berean dauden nodoak dira. 182 00:13:33,150 --> 00:13:42,230 Beraz, 3 eta 9 anai-arrebak dira zuhaitzean maila berean daudelako. 183 00:13:42,230 --> 00:13:46,190 Biek guraso berdina dute, 7. 184 00:13:46,190 --> 00:13:51,400 6 ez du anai-arrebak 9 seme-alabak izan ez delako edozein. 185 00:13:51,400 --> 00:13:55,540 Eta 7 anai-arrebak ez da gure zuhaitz sustraia delako edozein 186 00:13:55,540 --> 00:13:59,010 eta ez da soilik inoiz 1 root. 187 00:13:59,010 --> 00:14:02,260 7 anai-arrebak izatea eta bertan 7 gainetik nodo bat izan beharko lukete. 188 00:14:02,260 --> 00:14:07,480 7 guraso, kasu honetan 7 ez dira zuhaitzaren root izan beharko lukete. 189 00:14:07,480 --> 00:14:10,480 Ondoren, gurasoaren 7 berria izango litzateke, halaber, seme-alaba bat izatea, 190 00:14:10,480 --> 00:14:16,480 eta seme-alabak gero, 7 anai-arreba izan. 191 00:14:16,480 --> 00:14:21,040 >> Bale. On mugimenduan. 192 00:14:21,040 --> 00:14:24,930 Gure binary zuhaitz eztabaida hasi ginen, 193 00:14:24,930 --> 00:14:28,790 hitz egin dugu nola erabili izan dugu 194 00:14:28,790 --> 00:14:32,800 irabazteko bi array eta zerrendak lotutako abantaila bat. 195 00:14:32,800 --> 00:14:37,220 Eta horretarako goaz modu honetan ordena jabetza da. 196 00:14:37,220 --> 00:14:41,080 Bitarra zuhaitz bat agindu hori esaten dugu, espezifikazioaren arabera, 197 00:14:41,080 --> 00:14:45,740 gure zuhaitzean nodo bakoitzean izanez gero, bere ezker aldean ondorengoak guztiak - 198 00:14:45,740 --> 00:14:48,670 ezkerreko haur eta ezkerretik haurraren ondorengoak guztiak 199 00:14:48,670 --> 00:14:54,510 balio txikiagoan izan, eta eskuineko nodo guztiak 200 00:14:54,510 --> 00:14:57,770 eskuineko haur eta eskuineko haur azpikoen guztiak 201 00:14:57,770 --> 00:15:02,800 izan nodo begira ari gara uneko nodoaren balioa baino handiagoa. 202 00:15:02,800 --> 00:15:07,850 Just sinpletasunagatik, ez dagoela ez dira gure zuhaitzean nodo bikoiztuak edozein bere gain hartzen dugu. 203 00:15:07,850 --> 00:15:11,180 Esate baterako, zuhaitz hau ez da ari gara kasuan aurre egiteko 204 00:15:11,180 --> 00:15:13,680 7 balioa dugu erro non 205 00:15:13,680 --> 00:15:16,720  eta, ondoren, izan ere, balioa 7 zuhaitza beste leku batean. 206 00:15:16,720 --> 00:15:24,390 Kasu honetan, nabarituko zuhaitz hori da, hain zuzen ere, agindu duzu. 207 00:15:24,390 --> 00:15:26,510 7 balioa ditugu erro at. 208 00:15:26,510 --> 00:15:29,720 7 ezkerreko Everything - 209 00:15:29,720 --> 00:15:35,310 desegin I marka txiki horiek guztiak galtzen hemen. 210 00:15:35,310 --> 00:15:40,450 7 ezkerreko guztia - 3 eta 6 - 211 00:15:40,450 --> 00:15:49,410 balio horiek dira, bai 7 baino txikiagoa da, eta eskuinera dena besterik ez da hau 9 - 212 00:15:49,410 --> 00:15:53,450 7 baino handiagoa da. 213 00:15:53,450 --> 00:15:58,650 >> Hau ez da balio hauek bakarrik agindu zuhaitza, 214 00:15:58,650 --> 00:16:03,120 baina dezagun marrazteko gehiago horietako batzuk. 215 00:16:03,120 --> 00:16:05,030 Bide hori egin ahal izango da, benetan sorta oso bat. 216 00:16:05,030 --> 00:16:09,380 Azkarra bat besterik ez erabiltzeko gauza sinpleak non mantentzeko noa 217 00:16:09,380 --> 00:16:11,520 baizik eta marrazketa osoa kutxak-eta-geziak baino 218 00:16:11,520 --> 00:16:14,220 Besterik ez naiz zenbakiak marraztu eta geziak lotu gehitu du. 219 00:16:14,220 --> 00:16:22,920 Hasteko, besterik ez dugu gure jatorrizko zuhaitz idatzi berriro 7 izan genuen, eta, ondoren, 3, 220 00:16:22,920 --> 00:16:25,590 eta, ondoren, 3 adierazi back 6 eskubidea, 221 00:16:25,590 --> 00:16:30,890 eta 7 izan zen seme-alabak izateko eskubidea 9. 222 00:16:30,890 --> 00:16:33,860 Bale. Zer da Zuhaitz hau ezin izan dugu idazteko beste modu bat da? 223 00:16:33,860 --> 00:16:38,800 Horren ordez 3 izatea ezker 7 seme-alaba izan, 224 00:16:38,800 --> 00:16:41,360 ere izan dugu, 6, 7 seme-alaba ezker, 225 00:16:41,360 --> 00:16:44,470 eta, ondoren, 3 6 seme-alaba ezker. 226 00:16:44,470 --> 00:16:48,520 Lukeen itxura Zuhaitz hau hemen non dut 7. 227 00:16:48,520 --> 00:16:57,860 gero 6, gero, 3 eta 9 eskubidea. 228 00:16:57,860 --> 00:17:01,490 Era berean, ez dugu erroko nodoa 7. 229 00:17:01,490 --> 00:17:03,860 6 ere izan dugu gure erroko nodoa. 230 00:17:03,860 --> 00:17:06,470 Zer izango litzateke itxura? 231 00:17:06,470 --> 00:17:09,230 Ari gara agindu jabetza horri eustea nahi izanez gero, 232 00:17:09,230 --> 00:17:12,970 6 ezkerraldean dena baino txikiagoa izan behar du. 233 00:17:12,970 --> 00:17:16,540 Aukera bakarra da, eta hori 3. 234 00:17:16,540 --> 00:17:19,869 Baina gero, 6 eskuineko umearen gisa, bi aukera izango ditugu. 235 00:17:19,869 --> 00:17:25,380 Lehenik eta behin, 7 izan dira eta, ondoren, 9 236 00:17:25,380 --> 00:17:28,850 edo marraztu izan dugu, ez naiz hemen egin bezala - 237 00:17:28,850 --> 00:17:34,790 non 9 ditugu 6 eskuin haur bezala, 238 00:17:34,790 --> 00:17:39,050 eta, ondoren, 9 ezker haurraren 7. 239 00:17:39,050 --> 00:17:44,240 >> Orain, berriz, 7 eta 6 ez dira erro balio posible bakarra. 240 00:17:44,240 --> 00:17:50,200 3 erro at ere izan dugu. 241 00:17:50,200 --> 00:17:52,240 Zer gertatzen da 3 erro bada? 242 00:17:52,240 --> 00:17:54,390 Hemen, gauzak pixka bat interesgarria. 243 00:17:54,390 --> 00:17:58,440 Hiru ez du balio duen edozein baino gutxiago dira, 244 00:17:58,440 --> 00:18:02,070 beraz, zuhaitzean dagoen ezker alboko osoa besterik ez da nulua izango. 245 00:18:02,070 --> 00:18:03,230 Ez da ezer izan, han joan da. 246 00:18:03,230 --> 00:18:07,220 Eskuinean, gauzak zerrenda izan dugu, ordena gorakorrean. 247 00:18:07,220 --> 00:18:15,530 3, gero 6, gero 7 eta, ondoren, 9 izan izan dugu. 248 00:18:15,530 --> 00:18:26,710 Edo, 3 egin ahal izan genuen, gero 6, gero 9, ondoren, 7. 249 00:18:26,710 --> 00:18:35,020 Edo, 3 egin ahal izan genuen eta, ondoren, 7 eta, ondoren, 6 eta, ondoren, 9. 250 00:18:35,020 --> 00:18:40,950 Edo, 3, 7 - Egia esan, ez, ezin dugu 7 gehiago. 251 00:18:40,950 --> 00:18:43,330 Hori da gure gauza bat dago. 252 00:18:43,330 --> 00:18:54,710 9 egin ahal izango dugu, eta, ondoren, 9 6 egin ahal izango dugu eta, ondoren, 7. 253 00:18:54,710 --> 00:19:06,980 Edo, 3 egin ahal izango dugu eta, ondoren, 9 eta, ondoren, 7, eta, ondoren, 6. 254 00:19:06,980 --> 00:19:12,490 >> Gauza bat da hemen, zure atentzioa 255 00:19:12,490 --> 00:19:14,510 zuhaitz horiek pixka bat arraro begira daude. 256 00:19:14,510 --> 00:19:17,840 Hain zuzen ere, eskuineko aldean 4 zuhaitz begiratzen badugu 257 00:19:17,840 --> 00:19:20,930 Zirkulu dut, hemen 258 00:19:20,930 --> 00:19:28,410 zuhaitz horiek itxura ia zehazki lotuta zerrenda bat bezala. 259 00:19:28,410 --> 00:19:32,670 Nodo bakoitzak seme-alaba bakarra du, 260 00:19:32,670 --> 00:19:38,950 eta, beraz, ez dugu ikusten dugun honetan, zuhaitz-egitura, adibidez, 261 00:19:38,950 --> 00:19:44,720  hemen beheko ezkerreko zuhaitz bakarti. 262 00:19:44,720 --> 00:19:52,490 Zuhaitz hauek benetan izeneko endekapen binary zuhaitzak, 263 00:19:52,490 --> 00:19:54,170 eta gehiago horiei buruz hitz egin dugu etorkizunean 264 00:19:54,170 --> 00:19:56,730 batez ere, joan beste informatika ikastaroak hartzeko. 265 00:19:56,730 --> 00:19:59,670 Zuhaitz hauek endekapen dira. 266 00:19:59,670 --> 00:20:03,780 Oraindik ez dira oso erabilgarria da, hain zuzen ere, izan ere, egitura hau erabaki bera 267 00:20:03,780 --> 00:20:08,060  aldiz lotuta zerrenda baten antzekoa bilatzeko. 268 00:20:08,060 --> 00:20:13,050 Ez dugu aprobetxatu aparteko memoria - extra erakuslea honetan 269 00:20:13,050 --> 00:20:18,840 baita gure egitura modu honetan gaiztoa izatea. 270 00:20:18,840 --> 00:20:24,700 Baino gehiago joan eta marrazteko duten bitar zuhaitzak erro 9, 271 00:20:24,700 --> 00:20:27,220 litzateke dugun kasuan behin betiko da, 272 00:20:27,220 --> 00:20:32,380 ordez gara, puntu honetan, epe hau beste pixka bat hitz egingo 273 00:20:32,380 --> 00:20:36,150 hori erabili dugu, zuhaitzak, altuera deitzen den buruz hitz egiten denean. 274 00:20:36,150 --> 00:20:45,460 >> Zuhaitz baten altuera erro gehien urrutiko nodo distantzia da, 275 00:20:45,460 --> 00:20:48,370 edo, hobeto esanda, Hops kopurua egin ahal izateko izango litzateke 276 00:20:48,370 --> 00:20:53,750 erro hasiko da, eta, ondoren, azkenean zuhaitz gehien urrutiko nodo. 277 00:20:53,750 --> 00:20:57,330 Zuhaitz horietako batzuk marrazten ditudan dugu hemen, begiratuz gero 278 00:20:57,330 --> 00:21:07,870 Zuhaitz hau hartuko dugu goiko ezkerreko izkinan eta dugun hasten gara 3, 279 00:21:07,870 --> 00:21:14,510 ondoren, 1 hop 6, 7 bigarren hop egin behar dugu, 280 00:21:14,510 --> 00:21:20,560 eta hirugarren hop 9. 281 00:21:20,560 --> 00:21:26,120 Beraz, zuhaitz honen altuera 3. 282 00:21:26,120 --> 00:21:30,640 Zuhaitz berde honekin jasotako beste ariketa bera egin ahal izango dugu, 283 00:21:30,640 --> 00:21:40,100 eta zuhaitz horien guztien altuera dela ere, hain zuzen ere 3 ikusiko dugu. 284 00:21:40,100 --> 00:21:45,230 Zerk endekapen parte - 285 00:21:45,230 --> 00:21:53,750 beren altuera besterik ez da zuhaitz osoa nodo kopurua baino bat gutxiago. 286 00:21:53,750 --> 00:21:58,400 Zuhaitz hau beste gorriz encircled, beste alde batetik begiratzen badiogu, 287 00:21:58,400 --> 00:22:03,920 gehien urrutiko hosto nodoak direla ikusiko dugu 6 eta 9 - 288 00:22:03,920 --> 00:22:06,940 uzten du, eta seme-alabak ez duten nodo. 289 00:22:06,940 --> 00:22:11,760 Beraz, ahal izateko, erroko nodoa bai 6 edo 9 290 00:22:11,760 --> 00:22:17,840 7 hop bat egin dugu, eta, ondoren, 9 bigarren hop, 291 00:22:17,840 --> 00:22:21,240 eta, era berean,, 7 bakarrik hop bigarren bat 6. 292 00:22:21,240 --> 00:22:29,080 Beraz, Zuhaitz hau hemen altuera bakarrik 2. 293 00:22:29,080 --> 00:22:35,330 Atzera egin dezakezu, eta horretarako, beste zuhaitz guztiak aurrez dugun eztabaidatu 294 00:22:35,330 --> 00:22:37,380 7 eta 6 hasita, 295 00:22:37,480 --> 00:22:42,500 aurkitu eta, zuhaitz horien guztien altuera dela ere 2 duzu. 296 00:22:42,500 --> 00:22:46,320 >> Arrazoia izan dugu buruz hitz egitea agindu bitar zuhaitz 297 00:22:46,320 --> 00:22:50,250 eta zergatik cool daudela da, horien bitartez bilatu 298 00:22:50,250 --> 00:22:53,810 ordenatuko array bat baino gehiago bilatzeko modu oso antzekoa. 299 00:22:53,810 --> 00:22:58,720 Hau da, non hitz egiten dugu lookup hobetutako denbora hori lortzeko 300 00:22:58,720 --> 00:23:02,730 loturiko simple zerrenda baino gehiago. 301 00:23:02,730 --> 00:23:05,010 Lotuta zerrenda - elementu jakin bat aurkitu nahi duzu bada - 302 00:23:05,010 --> 00:23:07,470 Oraindik onena bilaketa lineala nolabaiteko 303 00:23:07,470 --> 00:23:10,920 non hasten hop zerrenda bat eta bat-batean, hasieran 304 00:23:10,920 --> 00:23:12,620 bat nodo nodo bat - 305 00:23:12,620 --> 00:23:16,060 zerrenda osoa aurkituko duzun arte, edozein dela ere bilatzen ari zaren bidez. 306 00:23:16,060 --> 00:23:19,440 , Berriz, zuhaitz bitar bat hau nice formatuan gordetzen bada, 307 00:23:19,440 --> 00:23:23,300 benetan lor dezakezu bilaketa bitar joan 308 00:23:23,300 --> 00:23:25,160 non eta zatiketak konkistatzeko 309 00:23:25,160 --> 00:23:29,490 eta urrats bakoitzaren zuhaitz dagokion erdia bidez bilaketa. 310 00:23:29,490 --> 00:23:32,840 Ikus dezagun nola obrak. 311 00:23:32,840 --> 00:23:38,850 >> Badugu - berriro ere, gure jatorrizko zuhaitz 312 00:23:38,850 --> 00:23:46,710 7, hasiko dugu, 3 dugu ezkerretik, 9 eskubidea, 313 00:23:46,710 --> 00:23:51,740 eta 3 azpian 6 dugu. 314 00:23:51,740 --> 00:24:01,880 Zuhaitz hau kopurua 6 bilatu nahi dugu bada, erroko hasteko genuke. 315 00:24:01,880 --> 00:24:08,910 Balioa, esan 6 bilatzen ari gara konparatu nahi dugu, 316 00:24:08,910 --> 00:24:12,320 ari gara gaur egun, 7 bilatzen nodo gordetako balioa, 317 00:24:12,320 --> 00:24:21,200 aurkituko 6 dela hain zuzen ere, 7 baino gutxiago, beraz, ezkerrera mugitu genuke. 318 00:24:21,200 --> 00:24:25,530 Izan ezkero 6 balioa 7 baino handiagoa, ordez genuke eskuinera eraman. 319 00:24:25,530 --> 00:24:29,770 Ezagutzen geroztik dugu gure agindu zuhaitz bitar egitura dela - 320 00:24:29,770 --> 00:24:33,910 baloreak 7 baino gutxiago 7 ezkerreko gordetzen, 321 00:24:33,910 --> 00:24:40,520 ez da beharrezkoa ere traba zuhaitzaren eskuinaldean bidez bilatzen da. 322 00:24:40,520 --> 00:24:43,780 Behin ezkerrera mugitu gara eta 3 duten nodo gara orain, 323 00:24:43,780 --> 00:24:48,110 konparazio hori bera egin ahal izango dugu, berriz, 3 eta 6 alderatu dugu. 324 00:24:48,110 --> 00:24:52,430 Balioa bilatzen ari gara - 3 baino handiagoa da, eta 6 bitartean aurkituko dugu 325 00:24:52,430 --> 00:24:58,580 3 nodo duten eskuinaldean joan gaitezke. 326 00:24:58,580 --> 00:25:02,670 Ezkerraldean ez da hemen, beraz, ez ikusi egiten zaie genezake hori. 327 00:25:02,670 --> 00:25:06,510 Baina bakarrik ezagutzen dugu delako zuhaitza bera bilatzen ari gara, 328 00:25:06,510 --> 00:25:08,660 ikusi eta zuhaitza ez du seme-alabak ahal izango dugu. 329 00:25:08,660 --> 00:25:13,640 >> Gainera, nahiko erraz bilatzeko 6 Zuhaitz hau ari badugu egiten geure buruari gizakiak, 330 00:25:13,640 --> 00:25:16,890 baina dezagun prozesu hau jarraitu mekanikoki ordenagailu bat bezala egingo 331 00:25:16,890 --> 00:25:18,620 algoritmoa benetan ulertzeko. 332 00:25:18,620 --> 00:25:26,200 Une honetan, gaur egun ari gara nodo dituen 6 begira, 333 00:25:26,200 --> 00:25:29,180 eta 6 balioa bilatzen ari gara, 334 00:25:29,180 --> 00:25:31,740 horregatik, hain zuzen ere, aurkitu dugu nodo egokia. 335 00:25:31,740 --> 00:25:35,070 6 balioa gure zuhaitz aurkitu ditugu, eta gure bilaketa gelditu ahal izango dugu. 336 00:25:35,070 --> 00:25:37,330 Une honetan, zer ari den gertatzen arabera, 337 00:25:37,330 --> 00:25:41,870 esan dezakegu, bai, aurkitu dugu 6 balioa badago, gure zuhaitzean. 338 00:25:41,870 --> 00:25:47,640 Edo, ari gara, zerbait, nodo bat sartu edo plangintza, hori egin ahal izango dugu puntu honetan. 339 00:25:47,640 --> 00:25:53,010 >> Egin dezagun pare bat gehiago bilaketak nola lan hau ikusteko. 340 00:25:53,010 --> 00:25:59,390 Dezagun zer gertatzen den ginen 10 balioa eta saiatu begiratu begiratu. 341 00:25:59,390 --> 00:26:02,970 Ginen 10 balioa bilatuko bada, erroko genuke. 342 00:26:02,970 --> 00:26:07,070 10 7 baino handiagoa dela genuke, beraz, eskuinera mugitu genuke. 343 00:26:07,070 --> 00:26:13,640 9 genuke eta 9 konparatu 10 eta 9 hori da, hain zuzen ere 10 baino gutxiago. 344 00:26:13,640 --> 00:26:16,210 Beraz, berriro ere, saiatu eskuinera eraman genuke. 345 00:26:16,210 --> 00:26:20,350 Baina, puntu honetan, nabarituko null nodo dugun Oraindik genuke. 346 00:26:20,350 --> 00:26:23,080 Ez dago ezer han. Ez dago ezer, non 10 izan behar du. 347 00:26:23,080 --> 00:26:29,360 Hau da, non porrot berri eman ahal izango dugu, hain zuzen ere ez dela ez zuhaitza 10. 348 00:26:29,360 --> 00:26:35,420 Eta, azkenik, dezagun kasu non bilatuko 1 zuhaitza saiatzen ari gara. 349 00:26:35,420 --> 00:26:38,790 Hau da, zer gertatzen den begiratzen dugu, bada 10,, eskuinera joan beharrean izan ezik antzekoa da, 350 00:26:38,790 --> 00:26:41,260 ezkerrera joan goaz. 351 00:26:41,260 --> 00:26:46,170 7, hasiko gara, eta ikus 1 7 baino txikiagoa dela, eta, beraz, ezkerrera mugitu gara. 352 00:26:46,170 --> 00:26:51,750 3 eta 1 3 baino txikiagoa da, beraz, berriro ezkerrera mugitu saiatu gara. 353 00:26:51,750 --> 00:26:59,080 Puntu honetan nodo nulua izan dugu, eta, beraz, berriro ere porrota berri eman ahal izango dugu. 354 00:26:59,080 --> 00:27:10,260 >> Ez gehiago ikasteko zuhaitz bitar buruz nahi baduzu, 355 00:27:10,260 --> 00:27:14,420 badira, haiekin egin ditzakezun arazo txiki fun sorta osoa. 356 00:27:14,420 --> 00:27:19,450 Marrazkia gomendatzen I praktikatzeko diagrama horiek bat-batean, 357 00:27:19,450 --> 00:27:21,910 eta hainbat urrats guztietan barrena jarraituz, 358 00:27:21,910 --> 00:27:25,060 super-erabilgarri delako etorri 359 00:27:25,060 --> 00:27:27,480 Huffman kodeketa arazo multzo ez denean bakarrik egiten ari zarenean 360 00:27:27,480 --> 00:27:29,390 baina ere ikastaro etorkizuneko - 361 00:27:29,390 --> 00:27:32,220 besterik gabe, nola marraztu datu-egitura horiek, eta arazoak bidez uste ikasteko 362 00:27:32,220 --> 00:27:38,000 luma eta paper edo, kasu honetan, iPad eta arkatzarekin. 363 00:27:38,000 --> 00:27:41,000 >> Nahiz eta puntu honetan, mugitzeko kodeketa praktika batzuk egin ditugu 364 00:27:41,000 --> 00:27:44,870 eta benetan binary zuhaitz hauekin jolastu eta ikusi. 365 00:27:44,870 --> 00:27:52,150 Atzera aldatzeko nire ordenagailuan zehar noa. 366 00:27:52,150 --> 00:27:58,480 Atalean, CS50 Run edo CS50 Espazioak ordez zati honetan, 367 00:27:58,480 --> 00:28:01,500 -Tresna erabili dut. 368 00:28:01,500 --> 00:28:04,950 >> Arazoa Set zehaztapen batera jarraituz, 369 00:28:04,950 --> 00:28:07,740 Tresnara ireki suposatzen dut naiz ikusten dut, 370 00:28:07,740 --> 00:28:11,020 joan nire Dropbox karpeta, artikulua 7 izeneko karpeta bat sortu, 371 00:28:11,020 --> 00:28:15,730 eta, ondoren, sortu binary_tree.c izeneko fitxategi bat. 372 00:28:15,730 --> 00:28:22,050 Hemen goaz. Dut-tresnaren dagoeneko irekia dago. 373 00:28:22,050 --> 00:28:25,910 Tira sortu terminal bat noa. 374 00:28:25,910 --> 00:28:38,250 Dropbox karpeta joan noa, izeneko section7 direktorioa 375 00:28:38,250 --> 00:28:42,230 ikusi eta erabat hutsik da. 376 00:28:42,230 --> 00:28:48,860 Orain en ireki binary_tree.c noa. 377 00:28:48,860 --> 00:28:51,750 Bale. Hemen gara - fitxategi hutsa. 378 00:28:51,750 --> 00:28:54,330 >> Dezagun itzuli zehaztapena. 379 00:28:54,330 --> 00:28:59,850 Zehaztapen eskatzen definizio mota berri bat sortzeko 380 00:28:59,850 --> 00:29:03,080 int balio duten zuhaitz bitar nodo 381 00:29:03,080 --> 00:29:07,110 balioak soilik marraztu dugu, gure aurretik diagramming atsegin dute. 382 00:29:07,110 --> 00:29:11,740 Boilerplate hau typedef egin ditudan dugu hemen erabili dugu 383 00:29:11,740 --> 00:29:14,420 Arazoa Set 5 aitortu behar duzula 384 00:29:14,420 --> 00:29:19,190 speller konkistatu programa hash taula modu zenuen bada. 385 00:29:19,190 --> 00:29:22,540 Ere aitortu behar duzu azken astean ataleko 386 00:29:22,540 --> 00:29:23,890 non hitz zerrendak lotuta dugu. 387 00:29:23,890 --> 00:29:27,870 Lortu dugu eta egitura nodo bat typedef hau, 388 00:29:27,870 --> 00:29:34,430 eta struct nodo hau eta egitura nodo izena aldez aurretik eman dugu 389 00:29:34,430 --> 00:29:39,350 Ondoren, beraz, ezin dugu ikus eta egitura nodo erakusle izan nahi dugu geroztik 390 00:29:39,350 --> 00:29:45,740 gure struct zati gisa, baina gero dugu encircled 391 00:29:45,740 --> 00:29:47,700 edo, hobeto esanda, artean - typedef batean 392 00:29:47,700 --> 00:29:54,600 beraz, geroago kodea, egitura hau dugu erreferentzia eta egitura nodo baten ordez nodo gisa. 393 00:29:54,600 --> 00:30:03,120 >> Banaka-zerrenda lotutako definizio oso antzekoa ikusi dugu azken astean izango da. 394 00:30:03,120 --> 00:30:20,070 Horretarako, dezagun idazten boilerplate hasteko. 395 00:30:20,070 --> 00:30:23,840 Osoko balioa bat izan dugula ezagutzen dugu, 396 00:30:23,840 --> 00:30:32,170 beraz, balio int dugu jarri, eta, ondoren, bakarrarekin erakuslea izatea hurrengo elementu ordez - 397 00:30:32,170 --> 00:30:33,970 , banaka-zerrendak lotutako genuen 398 00:30:33,970 --> 00:30:38,110 ezkerreko eta eskuineko seme-erakusle izan nahi dugu. 399 00:30:38,110 --> 00:30:42,880 Hori da ere - pretty simple struct nodo * ezker seme-alaba; 400 00:30:42,880 --> 00:30:51,190 eta egiturari nodo * eskubidea seme-alaba; Cool. 401 00:30:51,190 --> 00:30:54,740 Pretty good Irteeran itxura. 402 00:30:54,740 --> 00:30:58,530 Dezagun itzuli zehaztapena. 403 00:30:58,530 --> 00:31:05,030 >> Orain nodo * aldagai global bat zuhaitz baten erro aldarrikatu behar dugu. 404 00:31:05,030 --> 00:31:10,590 Global honetan bezala lehen erakusleak egin dugu gure zerrenda ere lotuta global goaz. 405 00:31:10,590 --> 00:31:12,690 Hau izan zen beraz, idazten dugun funtzioak 406 00:31:12,690 --> 00:31:16,180 ez dugu root honen inguruan pasatzen mantentzeko 407 00:31:16,180 --> 00:31:19,620 ez baduzu nahi duten funtzio hauek idazteko errekurtsiboki ikusi dugu, nahiz eta, 408 00:31:19,620 --> 00:31:22,830 hobea izan daiteke ere ez pasatzeko inguruan global gisa Lehenik eta behin 409 00:31:22,830 --> 00:31:28,090 eta horren ordez, hasieratu lokalki zure eginkizun nagusia. 410 00:31:28,090 --> 00:31:31,960 Baina, ez dugu globalki abiarazteko. 411 00:31:31,960 --> 00:31:39,920 Berriz ere, espazio pare bat eman dugu, eta * root nodo bat deklaratzen dut. 412 00:31:39,920 --> 00:31:46,770 Just ziurtatu ez ez dut utzi hau uninitialized egiteko, berdina noa null. 413 00:31:46,770 --> 00:31:52,210 Orain, funtzio nagusiak idatzi benetan azkar dugu hemen 414 00:31:52,210 --> 00:32:00,450 int main (int argc, eraikiak char * argv []) - 415 00:32:00,450 --> 00:32:10,640 eta nire argv array geratuko eraikiak hasteko besterik ez dut ezagutzen dut 416 00:32:10,640 --> 00:32:14,550 argumentuak duten argumentuak ziurrenik ez dut aldatu nahi dira. 417 00:32:14,550 --> 00:32:18,390 Nahi ditut aldatu beharko dut horietako kopiak egiten. 418 00:32:18,390 --> 00:32:21,740 Hau kode asko duzu. 419 00:32:21,740 --> 00:32:25,440 Isuna, bai modu da. Utzi - ezikusia eraikiak Nahi izanez gero, isuna da. 420 00:32:25,440 --> 00:32:28,630 Normalean jarri dut soilik gogorarazten dut 421 00:32:28,630 --> 00:32:33,650  ziurrenik hori ez dut nahi argumentuak horiek aldatzeko. 422 00:32:33,650 --> 00:32:39,240 >> Beti bezala, hau da, bueltan 0 nagusiaren amaieran line noa. 423 00:32:39,240 --> 00:32:45,730 Hemen, nire erroko nodoa hasieratu egingo dut. 424 00:32:45,730 --> 00:32:48,900 Nabarmentzen oraintxe bezala, erakuslea dut ezartzeko null 425 00:32:48,900 --> 00:32:52,970 beraz, ez da ezer seinalatuz. 426 00:32:52,970 --> 00:32:57,480 Benetan hasi nodo eraikitzeko, 427 00:32:57,480 --> 00:32:59,250 Lehenik memoria esleitu. 428 00:32:59,250 --> 00:33:05,910 Horretarako zeure malloc erabiliz memoria eginez noa. 429 00:33:05,910 --> 00:33:10,660 Root malloc emaitza berdina ezartzeko noa, 430 00:33:10,660 --> 00:33:19,550 eta nodo baten tamaina kalkulatzeko sizeof operadorea erabili dut. 431 00:33:19,550 --> 00:33:24,990 Arrazoia erabiltzen dut sizeof nodo aurrean, esan, 432 00:33:24,990 --> 00:33:37,020 malloc (4 + 4 +4) edo malloc 12 - antzeko zerbait egiten ari 433 00:33:37,020 --> 00:33:40,820 nahi dut nire kodea ahalik eta bateragarria izan delako. 434 00:33:40,820 --> 00:33:44,540 C fitxategia hartzeko gai izan nahi dut, konpilatu tresnaren 435 00:33:44,540 --> 00:33:48,820 eta, ondoren, konpilatu nire Mac on 64-bit 436 00:33:48,820 --> 00:33:52,040 edo erabat desberdina arkitektura - 437 00:33:52,040 --> 00:33:54,640 eta hori guztia berak lan egin nahi dut. 438 00:33:54,640 --> 00:33:59,510 >> Dut hipotesi eginez gero, aldagai tamaina buruz 439 00:33:59,510 --> 00:34:02,070 int edo erakuslea tamaina tamaina - 440 00:34:02,070 --> 00:34:06,070 ondoren ere dut hipotesi arkitektura mota buruz 441 00:34:06,070 --> 00:34:10,440 nire kodea ongi konpilatu exekutatutakoan. 442 00:34:10,440 --> 00:34:15,030 Beti erabili sizeof eskuz struct eremu summing aurrean. 443 00:34:15,030 --> 00:34:20,500 Beste arrazoirik ez dagoela ere izan liteke betegarria konpilatzailea struct sartu jartzen. 444 00:34:20,500 --> 00:34:26,570 Nahiz eta banakako eremu summing ez da zerbait normalean egin nahi duzula, 445 00:34:26,570 --> 00:34:30,340 beraz, lerro hori ezabatu. 446 00:34:30,340 --> 00:34:33,090 Orain, benetan erroko nodoa abiarazi, 447 00:34:33,090 --> 00:34:36,489 Bere eremu ezberdinetako bakoitzaren balioak entxufatu izan dut. 448 00:34:36,489 --> 00:34:41,400 Esate baterako, balioa 7 hasieratu nahi dut ezagutzen dut, 449 00:34:41,400 --> 00:34:46,920 eta, orain, ezker haurraren null noa 450 00:34:46,920 --> 00:34:55,820 eta eskuineko seme null ere. Great! 451 00:34:55,820 --> 00:35:02,670 Zehaztutako zati bat egin dugu. 452 00:35:02,670 --> 00:35:07,390 >> Espezifikazioak page 3 behean eskatzen me hiru nodoak sortzeko - 453 00:35:07,390 --> 00:35:10,600 3, 6 duten, eta bat duten 9 - 454 00:35:10,600 --> 00:35:14,210 eta, ondoren, Wire horiek sortu, beraz, itxura hain zuzen ere gure Zuhaitz-diagraman bezala da 455 00:35:14,210 --> 00:35:17,120 dugun buruz hitz egiten, aldez aurretik. 456 00:35:17,120 --> 00:35:20,450 Egin dezagun nahiko azkar hemen. 457 00:35:20,450 --> 00:35:26,270 Benetan azkar ikusten duzu naiz duten I kodea bikoiztuak sorta bat idazten hasteko. 458 00:35:26,270 --> 00:35:32,100 Nodo * sortu dut eta hiru dei noa. 459 00:35:32,100 --> 00:35:36,000 Malloc (sizeof (nodo)) berdintasuna ezartzeko noa. 460 00:35:36,000 --> 00:35:41,070 Hiru-> balioa ezartzean = 3 noa. 461 00:35:41,070 --> 00:35:54,780 Hiru -> left_child = NULL; hiru -> eskuineko _child = NULL; baita. 462 00:35:54,780 --> 00:36:01,150 Hori nahiko itxura root hasieratzeko antzekoa da, eta hori da zehazki zer 463 00:36:01,150 --> 00:36:05,760 I 6 eta 9 hasieratzean baita egin behar dut. 464 00:36:05,760 --> 00:36:20,720 Hori benetan azkar hemen egin dut, benetan, apur bat kopiatu eta itsatsi egin dut, 465 00:36:20,720 --> 00:36:46,140 eta ziurtatu dut ongi. 466 00:36:46,470 --> 00:37:09,900  Orain, got dut da kopiatu eta aurrera eta 6 berdina ezarri. 467 00:37:09,900 --> 00:37:14,670 Hori awhile hartzen da, eta ez da super-eraginkorrak ikus dezakezu. 468 00:37:14,670 --> 00:37:22,610 Apur bat besterik ez, funtzio bat egingo Gurekin idatzi dugu. 469 00:37:22,610 --> 00:37:32,890 Hau ordezkatu nahi dut, 9, ordezkatu eta 6. 470 00:37:32,890 --> 00:37:37,360 >> Orain lortu dugu gure nodoak sortu eta hasieratu. 471 00:37:37,360 --> 00:37:41,200 Lortu dugu gure root ezarri 7 berdinak, edo 7 balioa duten, 472 00:37:41,200 --> 00:37:46,510 gure nodo 3 duten, gure nodo 6 duten, eta gure nodo 9 duten. 473 00:37:46,510 --> 00:37:50,390 Une honetan, guztiok egin behar dugu alanbre guztia sortu da. 474 00:37:50,390 --> 00:37:53,020 Erakusleak guztiak hasieratu dut null arrazoia da, besterik gabe, beraz, ziurtatu egiten dut. 475 00:37:53,020 --> 00:37:56,260 Nik ez dut hor erakusleak uninitialized edozein istripu. 476 00:37:56,260 --> 00:38:02,290 Eta, gainera, geroztik, puntu honetan, besterik ez dut benetan konektatzeko nodoak bata bestearen 477 00:38:02,290 --> 00:38:04,750 batzuk direla ari benetan konektatuta ez daukat bidez joan eta egin 478 00:38:04,750 --> 00:38:08,240 Ziur nuluak guztiak ez dira leku egokiak. 479 00:38:08,240 --> 00:38:15,630 >> Erro hasita, ezagutzen dut erro ezker seme-alabak 3. 480 00:38:15,630 --> 00:38:21,250 Ezagutzen dut root eskubidea seme-alabak 9. 481 00:38:21,250 --> 00:38:24,880 Horren ondoren, beste seme-alaba bakarrik utzi dut, kezkatu 482 00:38:24,880 --> 00:38:39,080 3 eskubidea seme-alaba da, hau da, 6. 483 00:38:39,080 --> 00:38:44,670 Une honetan, itxura nahiko ona. 484 00:38:44,670 --> 00:38:54,210 Lerro hauen batzuk ezabatu egin dugu. 485 00:38:54,210 --> 00:38:59,540 Orain guztia itxura nahiko ona da. 486 00:38:59,540 --> 00:39:04,240 Dezagun gure zehaztapen itzuli eta ikusi zer hurrengoa egin behar dugu. 487 00:39:04,240 --> 00:39:07,610 >> Une honetan, funtzio bat deitu 'dauka' idatzi dugu 488 00:39:07,610 --> 00:39:14,150 dauzka boolearra (int balioa) 'prototipoa. 489 00:39:14,150 --> 00:39:17,060 Eta honek funtzioa da egia itzuli 490 00:39:17,060 --> 00:39:21,200  Zuhaitzaren adierazi gure root aldagai global 491 00:39:21,200 --> 00:39:26,950  funtzioa eta false bestela pasa balioa dauka. 492 00:39:26,950 --> 00:39:29,000 Dezagun aurrera eta ez dela. 493 00:39:29,000 --> 00:39:35,380 Zehazki lookup iPad duela pixka bat eskuz egin genuen bezala izango da. 494 00:39:35,380 --> 00:39:40,130 Let mapan handiago atzera pixka bat eta joan gora. 495 00:39:40,130 --> 00:39:43,130 Funtzio hau gure funtzio nagusia gainean jarri behar dugu 496 00:39:43,130 --> 00:39:48,990 beraz, ez dugu izan prototyping inolako egin. 497 00:39:48,990 --> 00:39:55,960 Beraz, boolearra badu (int balioa). 498 00:39:55,960 --> 00:40:00,330 Bertan dugu. Ez dago gure boilerplate adierazpena. 499 00:40:00,330 --> 00:40:02,900 Just ziurtatu hori konpilatzen egiteko, 500 00:40:02,900 --> 00:40:06,820 Aurretik joan eta besterik ez da ezarri berdinak false itzuli egingo naiz. 501 00:40:06,820 --> 00:40:09,980 Oraintxe bertan, funtzio hau ez du ezer egiten, eta beti berri 502 00:40:09,980 --> 00:40:14,010 bila ari garela balioa ez da zuhaitza. 503 00:40:14,010 --> 00:40:16,280 >> Une honetan, ideia ona izango da seguru asko 504 00:40:16,280 --> 00:40:19,600 idatzi dugu geroztik kodea sorta osoa, eta ez dugu, nahiz eta saiatu probatzen oraindik 505 00:40:19,600 --> 00:40:22,590 Ziurtatu guztiak biltzen egiteko. 506 00:40:22,590 --> 00:40:27,460 Egin dugula ziur hori benetan konpilatu egiteko gauza pare bat daude. 507 00:40:27,460 --> 00:40:33,530 Lehenik eta behin, ikusi dugu bada ez dugu oraindik sartutako edozein liburutegi edozein funtzio erabiliz. 508 00:40:33,530 --> 00:40:37,940 Funtzioak erabili dugu, orain arte, malloc dira, 509 00:40:37,940 --> 00:40:43,310 eta, ondoren, dugu mota honetako erabiliz - 'bool' izeneko estandarrak mota hau 510 00:40:43,310 --> 00:40:45,750 boolearra goiburu fitxategi estandarra. 511 00:40:45,750 --> 00:40:53,250 Boolearra mota bool.h estandarra, besteak beste, nahi dugu, behin betiko 512 00:40:53,250 --> 00:40:59,230 eta nahi dugu, liburutegi estandarra estandarra lib.h # 513 00:40:59,230 --> 00:41:03,530 malloc, eta doakoa da, eta hori guztia, besteak beste. 514 00:41:03,530 --> 00:41:08,660 Beraz, mapan handiago, irten dugu. 515 00:41:08,660 --> 00:41:14,190 Dezagun saiatu eta ziurtatu hori benetan egin konpilatzerakoan. 516 00:41:14,190 --> 00:41:18,150 Ez dela ikusten dugu, beraz, Oraindik eskuineko pista dugu. 517 00:41:18,150 --> 00:41:22,990 >> Dezagun ireki binary_tree.c berriro. 518 00:41:22,990 --> 00:41:34,530 Biltzen. Goazen behera eta ziurtatu deiak batzuk sartu dugun gure Contiene funtzioa 519 00:41:34,530 --> 00:41:40,130 zaitez guztiak ongi eta ona izan dadin. 520 00:41:40,130 --> 00:41:43,170 Esate baterako, bilaketak genuen gure zuhaitz lehenago, 521 00:41:43,170 --> 00:41:48,500 balio bilatzeko, 6, 10, eta 1 saiatu ginen, eta 6 zuhaitza zen bazekien dugu, 522 00:41:48,500 --> 00:41:52,220 10 zuhaitza, ez zen eta 1 ez zen zuhaitza bai. 523 00:41:52,220 --> 00:41:57,230 Dezagun modu gisa erabili deiak lagin horiek irudikatu nahi ala ez 524 00:41:57,230 --> 00:41:59,880 lan gure Contiene funtzioa. 525 00:41:59,880 --> 00:42:05,210 Horretarako, printf funtzioa erabili dut, 526 00:42:05,210 --> 00:42:10,280 eta dei bat dauka emaitza inprimatu goaz. 527 00:42:10,280 --> 00:42:13,280 Kate bat jarri dut "(% d) = duelako 528 00:42:13,280 --> 00:42:20,470  plug ari gara balioa bilatzen ari garela, 529 00:42:20,470 --> 00:42:27,130 =% s \ n ", eta erabiltzen duten gure formatu katea. 530 00:42:27,130 --> 00:42:30,720 Literalki inprimatu pantailan besterik ari gara ikusteko 531 00:42:30,720 --> 00:42:32,060 zer funtzio-dei bat itxura. 532 00:42:32,060 --> 00:42:33,580 Hau ez da benetan funtzio deia. 533 00:42:33,580 --> 00:42:36,760  Hau da, funtzio-dei bat itxura diseinatutako kate bat. 534 00:42:36,760 --> 00:42:41,140 >> Orain, balioak entxufatu dugu. 535 00:42:41,140 --> 00:42:43,580 Dauka saiatzeko 6 goaz, 536 00:42:43,580 --> 00:42:48,340 eta orduan zer da hemen egin behar dugu, erabili, hirutarra adibidez operadorea. 537 00:42:48,340 --> 00:42:56,340 Ikus dezagun dauka 6 -, beraz, gaur egun jasotako dut 6 eta badu 6, egia da, 538 00:42:56,340 --> 00:43:01,850 ari garela katea% s formatu karaktere bidaltzeko 539 00:43:01,850 --> 00:43:04,850 katea "benetako" izango da. 540 00:43:04,850 --> 00:43:07,690 Dezagun pixka bat baino gehiago joan. 541 00:43:07,690 --> 00:43:16,210 Bestela, kate "false" bidaltzeko 6 itzultzen faltsua badu nahi dugu. 542 00:43:16,210 --> 00:43:19,730 Hau da, apur bat Goofy-begira, baina baita agian I ilustratzeko irudikatu dut 543 00:43:19,730 --> 00:43:23,780 hirutarra adibidez operadorea zer ikusi dugu, ez baita awhile for itxura. 544 00:43:23,780 --> 00:43:27,670 Nice, handy modu irudikatu gure Contiene funtzioa lan bada izango da. 545 00:43:27,670 --> 00:43:30,040 Atzera mugitzeko ezkerreko noa, 546 00:43:30,040 --> 00:43:39,900 eta kopiatu eta itsatsi lerro hau hainbat aldiz noa. 547 00:43:39,900 --> 00:43:44,910 Balio horietako batzuk aldatu ditu inguruan, 548 00:43:44,910 --> 00:43:59,380 beraz, hau da, 1 izan behar du, eta hori 10 izango da. 549 00:43:59,380 --> 00:44:02,480 >> Puntu honetan lortu dugu polit bat Contiene funtzioa. 550 00:44:02,480 --> 00:44:06,080 Probak batzuk lortu dugu, eta hau lan guztiak galtzen dugu. 551 00:44:06,080 --> 00:44:08,120 Puntu honetan zenbait gehiago kodea idatzi dugu. 552 00:44:08,120 --> 00:44:13,160 Denbora irten eta ziurtatu dena oraindik biltzen. 553 00:44:13,160 --> 00:44:20,360 Irten, eta now dezagun binary zuhaitz egiten saiatu berriro. 554 00:44:20,360 --> 00:44:22,260 Beno, dugu got bezala errore bat dirudi, 555 00:44:22,260 --> 00:44:26,930 eta lortu dugu hau esplizituki liburutegiko funtzioa geratuko printf. 556 00:44:26,930 --> 00:44:39,350 Behar dugu joan eta # standardio.h besteak beste, itxura. 557 00:44:39,350 --> 00:44:45,350 Eta hori, dena behar konpilatu. Guztiak onak gara. 558 00:44:45,350 --> 00:44:50,420 Orain dezagun saiatu bitar zuhaitz martxan ikusi eta zer gertatzen den. 559 00:44:50,420 --> 00:44:53,520 Hemen, gaude. / Binary_tree 560 00:44:53,520 --> 00:44:55,190 eta, espero bezala vemos 561 00:44:55,190 --> 00:44:56,910 dugu ez delako inplementatu dauka oraindik, 562 00:44:56,910 --> 00:44:59,800 edo, hobeto esanda, besterik ez dugu bueltan faltsua jarri 563 00:44:59,800 --> 00:45:03,300 besterik ez dela faltsua itzuli horiek guztiak ikusten dugu, 564 00:45:03,300 --> 00:45:06,180 beraz, hori gehienetan nahiko ondo ari da lanean. 565 00:45:06,180 --> 00:45:11,860 >> Dezagun atzera jo eta benetan ezartzeko puntu honetan dauka. 566 00:45:11,860 --> 00:45:17,490 Behera korritzeko, Handiagotzeko noa, eta - 567 00:45:17,490 --> 00:45:22,330 gogoan, erabiltzen dugun algoritmoa erroko nodoa hasi ginen 568 00:45:22,330 --> 00:45:28,010 eta, ondoren, aurkitzen dugun nodo bakoitzean, konparazio bat egiten dugu, 569 00:45:28,010 --> 00:45:32,380 eta konparaketa horretan oinarritzen da ezker Umearen edo haurraren eskuineko bai dugu. 570 00:45:32,380 --> 00:45:39,670 Binary bilaketa kodea duten lehenago idatzi dugu, epe oso antzeko itxura du. 571 00:45:39,670 --> 00:45:47,810 Noiz hasiko gara, uneko nodoaren eduki nahi dugun badakigu 572 00:45:47,810 --> 00:45:54,050 ari gara, eta uneko nodoaren erroko nodoa hasieratu. 573 00:45:54,050 --> 00:45:56,260 Eta, orain, zuhaitz bidez jarraitzeko goaz, 574 00:45:56,260 --> 00:45:58,140 eta gogoratu, gure gelditu baldintza - 575 00:45:58,140 --> 00:46:01,870  Adibidez bidez benetan eskuz aritu gara lanean - 576 00:46:01,870 --> 00:46:03,960 nodo nulua topo egin dugu. 577 00:46:03,960 --> 00:46:05,480 ez begiratu null seme-alaba gara, 578 00:46:05,480 --> 00:46:09,620 baizik eta nodo bat dugu mugitu zuhaitza 579 00:46:09,620 --> 00:46:12,640 eta aurkitutako null nodo Oraindik dugu. 580 00:46:12,640 --> 00:46:20,720 Batetik bestera joateko ari dugu, orain arte ez da berdina null. 581 00:46:20,720 --> 00:46:22,920 Eta zer egin behar dugu? 582 00:46:22,920 --> 00:46:31,610 Probatzen ari gara bada (orain -> balioa == balioa), 583 00:46:31,610 --> 00:46:35,160 ondoren, benetan aurkitu ditudan nodo bila ari garela badakigu. 584 00:46:35,160 --> 00:46:40,450 Hortaz, hona hemen, itzultzeko egia esan daiteke. 585 00:46:40,450 --> 00:46:49,830 Bestela, ala ez, balioa balioa baino gutxiago ikusi nahi dugu. 586 00:46:49,830 --> 00:46:53,850 Uneko nodoaren balioa balioa baino txikiagoa bada bilatzen ari gara, 587 00:46:53,850 --> 00:46:57,280 eskuinera eraman dugu. 588 00:46:57,280 --> 00:47:10,600 Beraz, orain = orain -> right_child; eta bestela, ezkerrera eraman dugu. 589 00:47:10,600 --> 00:47:17,480 orain = orain -> left_child;. Pretty simple. 590 00:47:17,480 --> 00:47:22,830 >> Seguruenik ezagutzen duzu loop itxura oso antzekoa 591 00:47:22,830 --> 00:47:27,580 binary bilaketa terminoa lehenago, eta gero izan ezik, baxua, erdialdean, eta goi ginen aurre. 592 00:47:27,580 --> 00:47:30,000 Hemen, uneko balioa begiratu besterik ez dugu, 593 00:47:30,000 --> 00:47:31,930 beraz, atsegina eta erraza da. 594 00:47:31,930 --> 00:47:34,960 Dezagun ziurtatu kode hau da lan. 595 00:47:34,960 --> 00:47:42,780 Lehenik eta behin, ziurtatu du biltzen. Ez bezala dirudi. 596 00:47:42,780 --> 00:47:47,920 Dezagun saiatu exekutatzen ari da. 597 00:47:47,920 --> 00:47:50,160 Eta, hain zuzen ere, bistaratzen da espero dugun guztia. 598 00:47:50,160 --> 00:47:54,320 6 aurkitzen da zuhaitz, ez du aurkituko 10 10 zuhaitza da ez delako, 599 00:47:54,320 --> 00:47:57,740 eta ez du aurkitu 1 bai 1 zuhaitza ez da ere. 600 00:47:57,740 --> 00:48:01,420 Cool stuff. 601 00:48:01,420 --> 00:48:04,470 >> Bale. Dezagun gure zehaztapen itzuli eta ikusi zer ekarriko duen etorkizunean. 602 00:48:04,470 --> 00:48:07,990 Orain, gure zuhaitz batzuk gehiago nodoak gehitzeko nahi du. 603 00:48:07,990 --> 00:48:11,690 5, 2 eta 8 gehitu da, eta ziurtatu gure dituela kodea nahi du 604 00:48:11,690 --> 00:48:13,570 oraindik ere lan egiten du, espero bezala. 605 00:48:13,570 --> 00:48:14,900 Goazen hori egiteko. 606 00:48:14,900 --> 00:48:19,430 Puntu honetan, baizik eta hori gogaikarriak kopia eta itsatsi berriro egiteko baino, 607 00:48:19,430 --> 00:48:23,770 dezagun funtzio bat idatzi benetan nodo bat sortu. 608 00:48:23,770 --> 00:48:27,740 Joan gara behera bada modu nagusia, izan dugu dugun hau egiten ikusiko dugu 609 00:48:27,740 --> 00:48:31,210 oso antzekoa da, eta behin eta berriz nodo bat sortu nahi dugu aldi bakoitzean kodea. 610 00:48:31,210 --> 00:48:39,540 >> Dezagun funtzio bat izango dela benetan nodo bat eraiki Gurekin eta itzultzeko idatzi. 611 00:48:39,540 --> 00:48:41,960 Deitu du build_node noa. 612 00:48:41,960 --> 00:48:45,130 Balio jakin bat nodo bat eraiki dut. 613 00:48:45,130 --> 00:48:51,040 Hemen Txikiagotu. 614 00:48:51,040 --> 00:48:56,600 Lehenik eta behin, ez dut benetan zeure buruzko nodo espazioa sortu. 615 00:48:56,600 --> 00:49:05,400 Beraz, nodoak * n = malloc (sizeof (nodo)); n -> balioa = balioa; 616 00:49:05,400 --> 00:49:14,960 eta ondoren, hemen, besterik ez dut eremu guztiak hasieratu balio egokiak izan. 617 00:49:14,960 --> 00:49:22,500 Eta amaieran, gure nodo itzuli dugu. 618 00:49:22,500 --> 00:49:28,690 Bale. Gauza bat kontuan izan da funtzio hori eskubidea hemen 619 00:49:28,690 --> 00:49:34,320 erakuslea memoria que ha sido zeure-esleituriko itzuli egingo da. 620 00:49:34,320 --> 00:49:38,880 Zer da honi buruz nice nodo hau da gaur egun 621 00:49:38,880 --> 00:49:42,420 aldarrikatu zeure gainean deklaratu dugulako pila dugu 622 00:49:42,420 --> 00:49:45,050 ez genuke hau atsegin dute funtzio hau egin ahal izango duzu. 623 00:49:45,050 --> 00:49:47,690 Memoria Hori litzateke esparrua 624 00:49:47,690 --> 00:49:51,590 eta baliogabea izango litzateke, saiatu ginen beranduago sartzeko. 625 00:49:51,590 --> 00:49:53,500 Zeure-esleituriko memoria denez deklaratzen ari gara, 626 00:49:53,500 --> 00:49:55,830 askatzeaz geroago zaindu beharko dugu 627 00:49:55,830 --> 00:49:58,530 gure programa ez edozein Leak memoria. 628 00:49:58,530 --> 00:50:01,270 Hori izan dugu, beste guztia kodea punting 629 00:50:01,270 --> 00:50:02,880 sinpletasun garai hartan mesedetan, 630 00:50:02,880 --> 00:50:05,610 baina inoiz idatzi honen itxura duen funtzioa 631 00:50:05,610 --> 00:50:10,370 non duzun got batzuk deitu malloc edo idazketa barruan 632 00:50:10,370 --> 00:50:14,330 ziur jarri duzula comment nolabaiteko hemen dioen egin nahi baduzu, 633 00:50:14,330 --> 00:50:29,970 hey, badakizu, transmititutako balio hasieratu zeure esleituriko nodo bat itzultzen du. 634 00:50:29,970 --> 00:50:33,600 Ziur ohar dioen nolabaiteko jarri eta, ondoren, egin nahi duzun 635 00:50:33,600 --> 00:50:41,720 deitzaileari itzuliko memoria libratzeko behar da. 636 00:50:41,720 --> 00:50:45,450 Horrela, beste norbait inoiz doa bada, eta funtzio hori erabiltzen du, 637 00:50:45,450 --> 00:50:48,150 edozein dela ere bat atzera lortzen dute funtzio hori ezagutzen dute 638 00:50:48,150 --> 00:50:50,870 uneren libratuko behar dira. 639 00:50:50,870 --> 00:50:53,940 >> Guztiak ondo eta ona da hemen hartuta, 640 00:50:53,940 --> 00:51:02,300 jaitsiko gara gure kodea sartu eta lerro hauek guztiak ordezkatu hemen 641 00:51:02,300 --> 00:51:05,410 , gure eraikitze nodo funtzio deiak. 642 00:51:05,410 --> 00:51:08,170 Egin dezagun benetan azkar. 643 00:51:08,170 --> 00:51:15,840 Zati bat ari gara eta ez ordezkatu zati hau behera hemen 644 00:51:15,840 --> 00:51:18,520 behean non Wire dugu nodo bakoitzak beste seinalatu, 645 00:51:18,520 --> 00:51:21,030 hori delako, ezin dugu gure funtzioa. 646 00:51:21,030 --> 00:51:37,400 Baina, egin dezagun root = build_node (7); nodo * hiru = build_node (3); 647 00:51:37,400 --> 00:51:47,980 nodo * sei = build_node (6); nodo * bederatzi = build_node (9); 648 00:51:47,980 --> 00:51:52,590 Eta orain, nahi dugu nodoak gehitzeko 649 00:51:52,590 --> 00:52:03,530 = build_node (5); * bost nodo nodo * zortzi = build_node (8); 650 00:52:03,530 --> 00:52:09,760 eta beste nodo zer izan zen? Dezagun hemen ikus-en. Ere gehi 2 nahi dugu - 651 00:52:09,760 --> 00:52:20,280 nodo * bi = build_node (2); 652 00:52:20,280 --> 00:52:26,850 Bale. Une horretan, Behin got 7, 3, 9, eta 6 badakigu 653 00:52:26,850 --> 00:52:30,320 guztiak kable egokia, baina zer 5, 8, eta 2 buruz? 654 00:52:30,320 --> 00:52:33,550 Ordena dagokion guztia mantentzeko, 655 00:52:33,550 --> 00:52:39,230 badakigu, hiru eskubidea seme-alabak 6. 656 00:52:39,230 --> 00:52:40,890 Beraz, ari gara 5 gehitu nahi izanez gero, 657 00:52:40,890 --> 00:52:46,670 Gainera, 5 3 root zuhaitzaren eskuinaldean dagokio, 658 00:52:46,670 --> 00:52:50,440 beraz, orokorrean 5 6 ezker haurraren dagokio. 659 00:52:50,440 --> 00:52:58,650 Hau egin ahal izango dugu, esaten sei -> left_child = bost; 660 00:52:58,650 --> 00:53:10,790 eta, ondoren, 8 9 ezker haurraren dagokio, beraz, bederatzi -> left_child = zortzi; 661 00:53:10,790 --> 00:53:22,190 eta, ondoren, 2 3 seme-alaba ezker da, beraz, hori egin ahal izango dugu, hemen - thee -> left_child = bi; 662 00:53:22,190 --> 00:53:27,730 Ez baduzu nahiko jarraitu batera batera, marraztu zeure burua proposatzen dut. 663 00:53:27,730 --> 00:53:35,660 >> Bale. Dezagun gorde hau. Goazen eta ziurtatu du biltzen, 664 00:53:35,660 --> 00:53:40,760 eta, ondoren, gure Contiene deiak gehitu ahal izango dugu. 665 00:53:40,760 --> 00:53:44,120 Looks guztia oraindik biltzen bezala. 666 00:53:44,120 --> 00:53:51,790 Goazen eta zenbait dauka deiak gehitu. 667 00:53:51,790 --> 00:53:59,640 Berriz ere, kopia eta itsatsi pixka bat egin dut. 668 00:53:59,640 --> 00:54:15,860 Orain let 5, 8, eta 2 bilatzeko. Bale. 669 00:54:15,860 --> 00:54:28,330 Dezagun ziurtatu hori guztia oraindik ere itxura ona. Great! Gorde eta irten. 670 00:54:28,330 --> 00:54:33,220 Dezagun egin, konpilatu, eta now dezagun exekutatu. 671 00:54:33,220 --> 00:54:37,540 Emaitzak, dena besterik ez da atsegina eta ondo bezala lan begira. 672 00:54:37,540 --> 00:54:41,780 Great! Beraz, gaur egun, lortu dugu gure Contiene funtzioa idatzi. 673 00:54:41,780 --> 00:54:46,160 Dezagun mugitu eta nodoak nola sartu zuhaitza lanean hasteko 674 00:54:46,160 --> 00:54:50,000 urteaz geroztik ari gara, gisa egiten oraintxe, gauzak ez dira oso politak. 675 00:54:50,000 --> 00:54:52,280 >> Joaten gara atzera zehaztapena izanez gero, 676 00:54:52,280 --> 00:55:00,540 galdetzen digu izeneko funtzio bat txerta idazteko berriz, boolearra itzuli 677 00:55:00,540 --> 00:55:04,400 ala ez benetan izan dugu sartu nodoaren zuhaitza 678 00:55:04,400 --> 00:55:07,710 eta, ondoren, zuhaitza txertatzeko balioa zehaztu 679 00:55:07,710 --> 00:55:11,060 gure Txertatze funtzioa argumentu bakarra. 680 00:55:11,060 --> 00:55:18,180 Itzultzeko egia izan dugu, hain zuzen ere bada sartu nodoaren balioa duten zuhaitza, 681 00:55:18,180 --> 00:55:20,930 Horrek esan nahi du, dugu, bat, memoria nahikoa izan zuten, 682 00:55:20,930 --> 00:55:24,840 eta, ondoren, bi, nodo hori ez da dagoeneko zuhaitz geroztik dago - 683 00:55:24,840 --> 00:55:32,170 gogoan, ez dugu balio bikoiztuak izan zuhaitza, besterik gabe, gauza sinpleak egiteko. 684 00:55:32,170 --> 00:55:35,590 Bale. Kodea atzera. 685 00:55:35,590 --> 00:55:44,240 Ireki sortu. Pixka bat Zoom, eta gero behera joan. 686 00:55:44,240 --> 00:55:47,220 Dezagun txertatze-eskubidea badu, batez ere, funtzio ipini. 687 00:55:47,220 --> 00:55:56,360 Berriz ere, deitu behar boolearra-txertatze (int balioa) egingo da. 688 00:55:56,360 --> 00:56:01,840 Eman apur bat gehiago espazioa, eta, ondoren, lehenetsi gisa, 689 00:56:01,840 --> 00:56:08,870 dezagun oso amaieran faltsua bueltan jarri. 690 00:56:08,870 --> 00:56:22,620 Orain behera behealdean, dezagun aurrera, eta horren ordez, nodo eskuz eraikitzeko 691 00:56:22,620 --> 00:56:27,900 nagusian, geure buruari, eta horiek, kableatuaren ari gara egiten bezala beste bakoitzean seinalatu 692 00:56:27,900 --> 00:56:30,600 Txertatze funtzioa dugu konfiantza horretarako. 693 00:56:30,600 --> 00:56:35,510 Ez dugu gure Txertatze funtzioa oinarritzen hutsetik zuhaitz osoa eraikitzeko besterik gabe, 694 00:56:35,510 --> 00:56:39,970 baizik eta lerro hauek kentzeko dugu - we'll lerro hauen out duzu 695 00:56:39,970 --> 00:56:43,430 nodo 5, 8, eta 2 eraikitzen. 696 00:56:43,430 --> 00:56:55,740 Eta, horren ordez, deiak sartu dugu gure txertatze-funtzioa 697 00:56:55,740 --> 00:57:01,280 Ziurtatu hori, eta benetan funtzionatzen egiteko. 698 00:57:01,280 --> 00:57:05,840 Hemen goaz. 699 00:57:05,840 --> 00:57:09,300 >> Orain iruzkindu dugu lerro hauek. 700 00:57:09,300 --> 00:57:13,700 Besterik ez dugu, 7, 3, 9, eta 6 puntu honetan, gure zuhaitz. 701 00:57:13,700 --> 00:57:18,870 Ziur hori lan egin ahal izateko, 702 00:57:18,870 --> 00:57:25,050 mapan handiago ahal izango ditugu, egin gure binary zuhaitz, 703 00:57:25,050 --> 00:57:30,750 exekutatu, eta ikusten badu dezakegu gaur egun gurekin kontatzea Oraindik erabat eskuineko 704 00:57:30,750 --> 00:57:33,110 5, 8, eta 2 ez dira jada zuhaitzean. 705 00:57:33,110 --> 00:57:37,960 Joan atzera kodea, 706 00:57:37,960 --> 00:57:41,070 eta nola sartu dugu? 707 00:57:41,070 --> 00:57:46,290 Gogoratu denean benetan ginen 5 txertatu, 8, eta 2 aurretik genuen. 708 00:57:46,290 --> 00:57:50,100 Plinko joko bat jokatu dugu, non erro hasi ginen, 709 00:57:50,100 --> 00:57:52,780 zuhaitz bat jaitsi ziren banan-banan 710 00:57:52,780 --> 00:57:54,980 dagokion hutsunea aurkitu genuen arte. 711 00:57:54,980 --> 00:57:57,570 eta, ondoren, kable nodoaren Leku egokia. 712 00:57:57,570 --> 00:57:59,480 Gauza bera egiten ari gara. 713 00:57:59,480 --> 00:58:04,070 Hau da, funtsean, erabiltzen dugun kodea idatziz bezala dauka funtzioa 714 00:58:04,070 --> 00:58:05,910 non nodo lekuen aurkitzeko, 715 00:58:05,910 --> 00:58:10,560 eta, ondoren, bakarrik ari gara Nodo bertan sartu. 716 00:58:10,560 --> 00:58:17,000 Dezagun egiten hasteko. 717 00:58:17,000 --> 00:58:24,200 >> Beraz, * orain = root nodo bat dugu; ari gara dauka kodea jarraitu behar du 718 00:58:24,200 --> 00:58:26,850 aurkituko dugu ez dela nahiko Gurekin lan egin arte. 719 00:58:26,850 --> 00:58:32,390 Zuhaitz bidez joan gara uneko elementua null ez da bitartean, 720 00:58:32,390 --> 00:58:45,280 eta jakin dugu orain horren balioa sartu nahian ari garen balioa berdina da - 721 00:58:45,280 --> 00:58:49,600 ondo, eta kasu horretan, ezin dugu benetan sartu nodoaren 722 00:58:49,600 --> 00:58:52,730 Zuhaitz sartu bikoiztuak balio bat dugu, horrek esan nahi du delako. 723 00:58:52,730 --> 00:58:59,010 Hemen benetan ari gara false itzuli. 724 00:58:59,010 --> 00:59:08,440 Orain, bestela orain balioa da balioa baino txikiagoa bada, 725 00:59:08,440 --> 00:59:10,930 gaur egun ezagutzen dugun eskubidea dugula mugitzen 726 00:59:10,930 --> 00:59:17,190  Balio orain zuhaitz eskuineko erdia pertenece delako. 727 00:59:17,190 --> 00:59:30,110 Bestela, ezkerrera eraman dugu. 728 00:59:30,110 --> 00:59:37,980 Hori da, funtsean, gure Contiene funtziona bertan. 729 00:59:37,980 --> 00:59:41,820 >> Une honetan, behin amaitu dugu, berriz, begizta hau, 730 00:59:41,820 --> 00:59:47,350 gure orain erakuslea apuntatzen null 731 00:59:47,350 --> 00:59:51,540 funtzioa ez badago itzuli. 732 00:59:51,540 --> 00:59:58,710 Beraz, ari gara orain beharrik spot non nodo berria txertatu nahi dugu. 733 00:59:58,710 --> 01:00:05,210 Zer geratzen da egin behar da benetan nodo berria eraiki, 734 01:00:05,210 --> 01:00:08,480 egin nahiko erraz dezakegu. 735 01:00:08,480 --> 01:00:14,930 Gure super-handy nodo eraikitze funtzioa erabili ahal izango ditugu, 736 01:00:14,930 --> 01:00:17,210 eta zerbait ez dugu ez lehenago - 737 01:00:17,210 --> 01:00:21,400 mota besterik ez dugu ematen zuen, baina orain, ez besterik ez ziurtatu beharko dugu. 738 01:00:21,400 --> 01:00:27,130 probatzeko ziurtatu nodo berriak Itzulitako balioa izan zen benetan egin nahi dugu 739 01:00:27,130 --> 01:00:33,410 ez null, memoria sartzen da null bada hasteko ez dugu nahi duelako. 740 01:00:33,410 --> 01:00:39,910 Ziurtatu berri nodo null ez dela berdina probatu ahal izango dugu. 741 01:00:39,910 --> 01:00:42,910 Edo, horren ordez, besterik gabe, ahal izango dugu benetan bada null 742 01:00:42,910 --> 01:00:52,120 null bada, ondoren, besterik gabe, ahal izango dugu itzultzeko faltsua hasieran. 743 01:00:52,120 --> 01:00:59,090 >> Une honetan, nodo berria Wire bere zuhaitza Leku egokia dugu. 744 01:00:59,090 --> 01:01:03,510 Dugu atzera nagusia eta benetan ginen balioetan kableatuak baino lehen, 745 01:01:03,510 --> 01:01:08,470 ginen egiten 3 zuhaitza jarri nahi izan dugu, ikusiko dugu 746 01:01:08,470 --> 01:01:11,750 root haurren ezkerreko accessed dugu. 747 01:01:11,750 --> 01:01:14,920 9 jarri dugu zuhaitza, erro haur eskubidea sartzeko egin behar izan dugu. 748 01:01:14,920 --> 01:01:21,030 Gurasoa erakuslea izan behar zuhaitza sartu balio berri bat jarri behar izan genuen. 749 01:01:21,030 --> 01:01:24,430 Itzuli korritzea sartu, ez da nahiko lan du hemen 750 01:01:24,430 --> 01:01:27,550 guraso erakuslea izan dugu ez delako. 751 01:01:27,550 --> 01:01:31,650 Zer egiteko gai izan nahi dugu, hau da, puntu honetan, 752 01:01:31,650 --> 01:01:37,080 gurasoaren balioa egiaztatu eta ikusi ondo, gosh 753 01:01:37,080 --> 01:01:41,990 gurasoaren balioa uneko balioa baino txikiagoa bada, 754 01:01:41,990 --> 01:01:54,440 ondoren, guraso eskubidea seme-alabak nodo berria izan behar du; 755 01:01:54,440 --> 01:02:07,280 bestela, gurasoa seme-alaba ezker nodo berria izan behar du. 756 01:02:07,280 --> 01:02:10,290 Baina, ez dugu guraso erakuslea hau nahiko oraindik. 757 01:02:10,290 --> 01:02:15,010 >> Horretarako, benetan ari gara jarraitzeko Zuhaitz bidez goazela 758 01:02:15,010 --> 01:02:18,440 eta jakin gure loop goiko toki egokia. 759 01:02:18,440 --> 01:02:26,840 Egin ahal izango dugu scrolling back up gure Txertatze funtzioa goian 760 01:02:26,840 --> 01:02:32,350 eta erakuslea beste aldagai segimendu izeneko gurasoa. 761 01:02:32,350 --> 01:02:39,340 Ezarri berdinak gara, hasieran null 762 01:02:39,340 --> 01:02:43,640 eta, ondoren, aldi bakoitzean zuhaitz bidez, 763 01:02:43,640 --> 01:02:51,540 guraso erakuslea uneko erakuslea etortzeko goaz. 764 01:02:51,540 --> 01:02:59,140 Ezarri guraso orain berdina. 765 01:02:59,140 --> 01:03:02,260 Horrela, garai bakoitzean zehar joaten gara, 766 01:03:02,260 --> 01:03:05,550 uneko erakuslea lortzen handitutako bermatzeko goaz 767 01:03:05,550 --> 01:03:12,640 guraso erakuslea jarraitzen du - maila bat besterik ez da zuhaitza uneko erakuslea baino handiagoa. 768 01:03:12,640 --> 01:03:17,370 Guztiak itxura nahiko ona da. 769 01:03:17,370 --> 01:03:22,380 >> Nik uste dut gauza bat egokitu nahi dugu egingo da hau nodo itzuli null eraikitzeko. 770 01:03:22,380 --> 01:03:25,380 Eraikitzeko nodo benetan behar bezala itzuli null, 771 01:03:25,380 --> 01:03:31,060 kode hori aldatu nahi dugu, 772 01:03:31,060 --> 01:03:37,270 hemen probatu delako, inoiz ez dugu ziur malloc baliozko erakuslea itzuli bat egiteko. 773 01:03:37,270 --> 01:03:53,390 Beraz, (n = NULL!), Eta ondoren 774 01:03:53,390 --> 01:03:55,250 malloc itzuli baliozko erakuslea gero, hasieratu dugu; 775 01:03:55,250 --> 01:04:02,540 bestela, besterik ez dugu itzuli eta amaituko da Gurekin null itzultzen. 776 01:04:02,540 --> 01:04:13,050 Orain itxura nahiko ona da. Dezagun ziurtatu hau benetan biltzen. 777 01:04:13,050 --> 01:04:22,240 Binary zuhaitza, eta oh, lortu dugu stuff batzuk gertatzen da hemen. 778 01:04:22,240 --> 01:04:29,230 >> Lortu dugu, funtzioaren adierazpen inplizitua eraikitzeko nodo. 779 01:04:29,230 --> 01:04:31,950 Berriz ere, Konpilatzaileak hauekin, goialdean hasten ari dugu. 780 01:04:31,950 --> 01:04:36,380 Zer behar duela esan nahi da naiz I eraikitzeko nodo deituz dut benetan aurretik deklaratu du. 781 01:04:36,380 --> 01:04:37,730 Dezagun itzuli kodea benetan azkar. 782 01:04:37,730 --> 01:04:43,510 Korritu behera, eta ziur aski, nire Txertatze funtzioa deklaratu 783 01:04:43,510 --> 01:04:47,400 eraikitze nodo funtzio batez ere, 784 01:04:47,400 --> 01:04:50,070 baina eraikitzeko nodo txertatze barruan erabiltzen saiatzen ari naiz. 785 01:04:50,070 --> 01:05:06,610 Kopia eta joan egingo naiz, eta gero, eraikitze nodo funtzio modu itsatsi hemen goialdean. 786 01:05:06,610 --> 01:05:11,750 Horrela, espero funtzionatuko du. Eman dezagun hau beste joan. 787 01:05:11,750 --> 01:05:18,920 Orain biltzen dena. Guztiak ona da. 788 01:05:18,920 --> 01:05:21,640 >> Baina puntu honetan, ez dugu benetan gure Txertatze funtzioa deitzen zaio. 789 01:05:21,640 --> 01:05:26,510 Ezagutzen dugu biltzen dela, eta, beraz, goazen, eta dei batzuk jarri sartu 790 01:05:26,510 --> 01:05:28,240 Egin dezagun hori gure eginkizun nagusia. 791 01:05:28,240 --> 01:05:32,390 Hemen, iruzkindu, 5, 8, eta 2 792 01:05:32,390 --> 01:05:36,680 eta orduan ez genuen Wire horiek gora behera hemen. 793 01:05:36,680 --> 01:05:41,640 Egin dezagun dei batzuk txertatzeko, 794 01:05:41,640 --> 01:05:46,440 dezagun ere erabili stuff mota bera erabiltzen dugu 795 01:05:46,440 --> 01:05:52,810 printf deiak horiek egin genuen ziur dena txertatuko get zuen behar bezala egiteko. 796 01:05:52,810 --> 01:06:00,550 Kopiatu eta itsatsi egingo dut, 797 01:06:00,550 --> 01:06:12,450 eta horren ordez, badu txertatze egin dugu. 798 01:06:12,450 --> 01:06:30,140 Eta horren ordez, 6, 10 eta 1, 5, 8, eta 2 erabiltzen dugu. 799 01:06:30,140 --> 01:06:37,320 Espero sartu behar 5, 8, eta 2 zuhaitz sartu. 800 01:06:37,320 --> 01:06:44,050 Konpilatu. Guztiak ona da. Orain benetan dugu gure programa exekutatu. 801 01:06:44,050 --> 01:06:47,330 >> Dena faltsua itzuli. 802 01:06:47,330 --> 01:06:53,830 Beraz, 5, 8, eta 2 ez da joan, eta Contiene ez bilatu bai itxura. 803 01:06:53,830 --> 01:06:58,890 Zer gertatzen da? Dezagun Txikiagotu. 804 01:06:58,890 --> 01:07:02,160 Lehenengo arazoa zen txertatze zirudien faltsua itzultzeko, 805 01:07:02,160 --> 01:07:08,750 eta begiratzen dugu gure bueltan dei faltsua utzi delako bezala, 806 01:07:08,750 --> 01:07:14,590 eta egia esan, inoiz ez dugu itzuli egia. 807 01:07:14,590 --> 01:07:17,880 Ezarri ahal izango dugu. 808 01:07:17,880 --> 01:07:25,290 Bigarren arazoa da, nahiz eta gaur egun egiten dugun - gorde hau, irten 809 01:07:25,290 --> 01:07:34,530 make berriro, konpilatu da ondoren exekutatu da - 810 01:07:34,530 --> 01:07:37,670 beste zerbait gertatu da hemen ikusten dugu. 811 01:07:37,670 --> 01:07:42,980 5, 8, eta 2 ziren oraindik, inoiz zuhaitza aurkitu. 812 01:07:42,980 --> 01:07:44,350 Beraz, zer gertatzen da? 813 01:07:44,350 --> 01:07:45,700 >> Dezagun begirada kodea. 814 01:07:45,700 --> 01:07:49,790 Ikus dezagun hau irudikatu bada. 815 01:07:49,790 --> 01:07:57,940 Gurasoa ez da nulua izanik hasiko dugu. 816 01:07:57,940 --> 01:07:59,510 Erakuslea uneko root erakuslea berdina ezarri dugu, 817 01:07:59,510 --> 01:08:04,280 eta gure lan egiteko Zuhaitz bidez goaz. 818 01:08:04,280 --> 01:08:08,650 Uneko nodoaren null ez bada, ondoren, behera mugitu ahal izango dugun pixka bat ezagutzen dugu. 819 01:08:08,650 --> 01:08:12,330 Gure guraso erakuslea dugu egungo erakuslea berdinak izan, 820 01:08:12,330 --> 01:08:15,420 checked balioa balioak berdinak dira faltsuak itzuli dugu. 821 01:08:15,420 --> 01:08:17,540 Baloreak ez dira hain eramaten bada eskubidea dugu; 822 01:08:17,540 --> 01:08:20,399 bestela, ezkerreko aldatu dugu. 823 01:08:20,399 --> 01:08:24,220 Ondoren, nodo bat eraiki dugu. Pixka bat mapan handiago dut. 824 01:08:24,220 --> 01:08:31,410 Eta hemen, sortu Wire saiatzeko balio berdina izan dugu. 825 01:08:31,410 --> 01:08:37,250 Zer gertatzen da? Ikus dezagun ziurrenik Valgrind gurekin bada aholku bat eman dezake. 826 01:08:37,250 --> 01:08:43,910 >> Valgrind erabili besterik ez delako Valgrind benetan azkar bidez gustatzen zait 827 01:08:43,910 --> 01:08:46,729 eta esaten dizu daude memoria akatsak edozein bada. 828 01:08:46,729 --> 01:08:48,300 Valgrind kodea exekutatzen dugu, 829 01:08:48,300 --> 01:08:55,859 ikusi dezakezu eskuineko here--Valgrind./binary_tree--and hit sartu. 830 01:08:55,859 --> 01:09:03,640 Baina ez dute memoria akatsen bat ikusten duzu, beraz, dena ongi bezala, beraz, orain arte badirudi. 831 01:09:03,640 --> 01:09:07,529 Dute memoria filtrazioen gara, ezagutzen egiten dugu, gara ez delako 832 01:09:07,529 --> 01:09:08,910 gure edozein nodo libre gertatzen ari da. 833 01:09:08,910 --> 01:09:13,050 Dezagun saiatu GDB exekutatzen ari da ikusteko zer ari den benetan gertatzen ari. 834 01:09:13,050 --> 01:09:20,010 Gdb egin dugu. / Binary_tree. Abiaraziko da isuna. 835 01:09:20,010 --> 01:09:23,670 Dezagun ezarri txertatze-break puntu bat. 836 01:09:23,670 --> 01:09:28,600 Dezagun exekutatu. 837 01:09:28,600 --> 01:09:31,200 Inoiz ez dugu benetan izeneko txertatze dirudi. 838 01:09:31,200 --> 01:09:39,410 Arazoa zen itxura besterik ez denean behera aldatu dut hemen nagusian 839 01:09:39,410 --> 01:09:44,279 dauka printf deiak horiek guztiak - 840 01:09:44,279 --> 01:09:56,430 Egia esan, inoiz ez dut aldatu hauen txertatze deitu. 841 01:09:56,430 --> 01:10:01,660 Eman dezagun saiatu. Dezagun konpilatu. 842 01:10:01,660 --> 01:10:09,130 Guztiak itxura ona dago. Dezagun saiatu exekutatzen ari da, ikusi zer gertatzen den. 843 01:10:09,130 --> 01:10:13,320 Bale! Everything itxura nahiko ona dago. 844 01:10:13,320 --> 01:10:18,130 >> Final gauza pentsatu da, daude kasu ertzean txertatze hau edozein? 845 01:10:18,130 --> 01:10:23,170 Eta bihurtzen da, bai, bat ertzean Kasu horretan, interesgarria da beti pentsatu 846 01:10:23,170 --> 01:10:26,250 da, zer gertatzen da zure zuhaitz hutsik badago, eta txertatze-funtzio hau deitu? 847 01:10:26,250 --> 01:10:30,330 Arituko da? Beno, dezagun ematen saiatu. 848 01:10:30,330 --> 01:10:32,110 - Binary_tree c. 849 01:10:32,110 --> 01:10:35,810 Hau probatzeko goaz, gure funtzio nagusia behera joan goaz, 850 01:10:35,810 --> 01:10:41,690 eta ez-kableatu nodo horiek atsegin dute hau baino, 851 01:10:41,690 --> 01:10:56,730 besterik ari gara gauza osoa behar duzu, 852 01:10:56,730 --> 01:11:02,620 eta sortu nodo geuk kableatuaren ordez, 853 01:11:02,620 --> 01:11:09,400 benetan ahal izango dugu aurrera, eta hori guztia ezabatu. 854 01:11:09,400 --> 01:11:17,560 Guztia dei bat sartu egin gara. 855 01:11:17,560 --> 01:11:49,020 Beraz, utzi egin beharrean, 5, 8, eta 2, 7 txertatzeko, 3, eta 9 ari dugu. 856 01:11:49,020 --> 01:11:58,440 Eta gero ere nahi dugu, 6 sartu baita. 857 01:11:58,440 --> 01:12:05,190 Gorde. Irten. Egin binary zuhaitz. 858 01:12:05,190 --> 01:12:08,540 Guztiak biltzen ditu. 859 01:12:08,540 --> 01:12:10,320 Besterik ez dugu exekutatu da, eta ikusi zer gertatzen den, 860 01:12:10,320 --> 01:12:12,770 baina ere benetan garrantzitsua izango da ziur egiteko 861 01:12:12,770 --> 01:12:14,740 ez dugu memoria akatsak 862 01:12:14,740 --> 01:12:16,840 hau gure ertzean kasu buruz ezagutzen dugun bat da geroztik. 863 01:12:16,840 --> 01:12:20,150 >> Dezagun ziurtatu ondo funtzionatzen duela Valgrind pean, 864 01:12:20,150 --> 01:12:28,310 Valgrind. / binary_tree exekutatu egin dugu. 865 01:12:28,310 --> 01:12:31,110 Hain zuzen ere, dugu bezala testuinguru bat errorea bat dirudi 866 01:12:31,110 --> 01:12:33,790 segmentaziuo hutsegitea dugu. 867 01:12:33,790 --> 01:12:36,690 Zer gertatu da? 868 01:12:36,690 --> 01:12:41,650 Valgrind benetan kontatzen digu, non da. 869 01:12:41,650 --> 01:12:43,050 Zoom out apur bat. 870 01:12:43,050 --> 01:12:46,040 Gure txertatze-funtzio bezala gertatzen ari dela dirudi, 871 01:12:46,040 --> 01:12:53,420 non tamaina 4 baliogabe bat irakurri dugu insert at line 60. 872 01:12:53,420 --> 01:13:03,590 Dezagun atzera jo eta ikus zer gertatzen da hemen. 873 01:13:03,590 --> 01:13:05,350 Txikiagotu oso azkarra da. 874 01:13:05,350 --> 01:13:14,230 Ziurtatu du ez duela pantailaren ertzean dugun guztia ikusi ahal izateko egin nahi dut. 875 01:13:14,230 --> 01:13:18,760 Pull hori pixka bat. Bale. 876 01:13:18,760 --> 01:13:35,030 Korritu behera, eta arazoa da hemen. 877 01:13:35,030 --> 01:13:40,120 Zer gertatzen da lortuko dugu behera bada, eta gaur egungo nodo nulua da dagoeneko, 878 01:13:40,120 --> 01:13:44,010 gure guraso nodo nulua da, beraz, oso goian, hementxe dugu - 879 01:13:44,010 --> 01:13:47,340 bitartean begizta hau inoiz ez da benetan bada exekutatzen 880 01:13:47,340 --> 01:13:52,330 gure uneko balioa null delako gure root null orain null da, beraz, 881 01:13:52,330 --> 01:13:57,810 gero, gure guraso inoiz ez orain edo baliozko balio bat lortzen da, 882 01:13:57,810 --> 01:14:00,580 Beraz, gurasoak ere izango dira null. 883 01:14:00,580 --> 01:14:03,700 Gogoratu behar dugu hori egiaztatu 884 01:14:03,700 --> 01:14:08,750 denbora hartu behar dugu hemen, eta gurasoaren balioa sartzen hasten dugu. 885 01:14:08,750 --> 01:14:13,190 Beraz, zer gertatzen da? Beno bada, gurasoak null 886 01:14:13,190 --> 01:14:17,990 (guraso == NULL) - ezagutzen dugu 887 01:14:17,990 --> 01:14:19,530 ez dago behar zuhaitza ezer ez izan. 888 01:14:19,530 --> 01:14:22,030 Saiatzen dira erro sartu behar dugu. 889 01:14:22,030 --> 01:14:32,570 Hori egin ahal izango dugu, root nodo berria berdina ezarriz. 890 01:14:32,570 --> 01:14:40,010 Ondoren, puntu honetan, ez dugu benetan nahi beste gauza hauen bidez. 891 01:14:40,010 --> 01:14:44,780 Horren ordez, hementxe, ez bai dugu bat, bestela-bada bestela, 892 01:14:44,780 --> 01:14:47,610 edo dena uztartu izan dugu hemen bat bestela, 893 01:14:47,610 --> 01:14:56,300 baina hemen dugu erabili, bestela, eta, era horretan egin. 894 01:14:56,300 --> 01:14:59,030 Orain, probatu dugu, gure guraso ziurtatu ez dela null 895 01:14:59,030 --> 01:15:02,160 aurretik benetan, bere eremu sartzeko saiatzen ari dela esan nahi du. 896 01:15:02,160 --> 01:15:05,330 Segmentaziuo hutsegitea saihesteko lagunduko digu. 897 01:15:05,330 --> 01:15:14,740 Beraz, dugu irten, mapan handiago, konpilatu, exekutatu. 898 01:15:14,740 --> 01:15:18,130 >> Akatsik ez, baina oraindik dugu memoria filtrazioen sorta bat 899 01:15:18,130 --> 01:15:20,650 genuen, ez delako gure edozein nodo libre. 900 01:15:20,650 --> 01:15:24,350 Baina, joaten gara eta hemen gure inprimaketaren dugu, 901 01:15:24,350 --> 01:15:30,880 ikusiko dugu, hori bai, gure txertatzen guztiak itxura egia itzuli ziren, eta hori ona da. 902 01:15:30,880 --> 01:15:33,050 Txertatzen dira egia, 903 01:15:33,050 --> 01:15:36,670 eta, ondoren, dagokion Contiene deiak ere egia da. 904 01:15:36,670 --> 01:15:41,510 >> Good job! Dugu bezala txertatze bezala idatzia dirudi. 905 01:15:41,510 --> 01:15:47,430 Hori da aste honetan Arazoa Set espezifikazioa dugun guztia. 906 01:15:47,430 --> 01:15:51,720 Fun erronka bat da, nola benetan joan nahi duzun pentsatu 907 01:15:51,720 --> 01:15:55,340 Zuhaitz hau nodo guztiak. 908 01:15:55,340 --> 01:15:58,830 Egin ahal izango dugu, beraz, modu ezberdinetan zenbaki bat, 909 01:15:58,830 --> 01:16:01,930 baina uzten dut sortu ahal izango duzu, esperimentu 910 01:16:01,930 --> 01:16:06,080 eta fun erronka bat bezala, saiatu eta ziurtatu ziurtatu egin daitezke 911 01:16:06,080 --> 01:16:09,490 Valgrind txosten hori ez akatsak eta ihesak ez itzultzen du. 912 01:16:09,490 --> 01:16:12,880 >> Zorte on aste honetan Huffman kodeketa arazo multzo, 913 01:16:12,880 --> 01:16:14,380 eta ikusiko dugu datorren astean! 914 01:16:14,380 --> 01:16:17,290 [CS50.TV]