[Powered by Google Translate] [Artikulua 7: More erosoa] [Rob Bowden] [Harvardeko Unibertsitateko] [Hau CS50] [CS50.TV] Guztiak eskubidea. Beraz, esan dut nire posta bezala, hau da bitar-zuhaitz-maila handiko atal bat izango da. Baina ez dira asko galderak. Beraz, galdera bakoitzean eta saiatu marraztu dugu eta gauzak egiteko modu onena xehetasun mingarriak sartu. Beraz, hasiera-hasieratik, lagin zuhaitz bitar eta stuff marrazkien bidez. Beraz, hemen, "Gogoratu binary zuhaitz bat nodo lotuta zerrenda antzekoak ditu, Erakuslea ordez izan ezik, bi dira: 'seme-alaba' ezkerreko bat eta eskuinera 'seme-alaba' bat. " Bitarra zuhaitz bat Beraz lotutako zerrenda bat besterik ez bezalakoa da, struct izan ezik, bi erakusle izan da. Ez trinary zuhaitzak, hiru erakusle izan behar diren, daude N-Ary zuhaitzak, besterik ez generic erakuslea Orduan duzu behar bezain handia izango da malloc erakusleak nahikoa posible seme-alaba guztiak. Beraz, binary zuhaitz gertatzen da bi zenbaki konstante bat izan da. Nahi izanez gero, zuhaitz unario lotutako zerrenda bat eman dezakezu, baina ez dut uste inork deitzen dela. "Marraztu zuhaitz bitar nodoaren diagrama kutxak-eta-geziak Nate gogokoena, 7, non erakuslea bakoitzean umearen null duten. " Beraz, iPad moduan. Nahiko erraza izango da. Nodo bat besterik ez gara, karratu bat marraztu dut. Eta balio marraztu dut hemen. Beraz, balioa egingo hemen, eta, ondoren, behera hemen erakuslea ezker ezkerreko eta eskuineko erakuslea eskubidea izango dugu. Eta asko da konbentzio, eta ezkerretik eskuinera, erakusle izenak deitu. Bi gauza horiek null izango dira. Izango dela besterik ez da hutsik egon, eta hori izan nahiko luke null. Ongi da. Beraz, hemen atzera. "Zerrenda bat lotuta, partidu besterik ez dugu erakuslea bat gorde lehen nodo zerrenda osoa lotuta zerrenda, edo zerrenda osoa gogoratzeko. Era berean, zuhaitzak, besterik ez dugu erakuslea bat gorde zuhaitz osoa gogoratzeko nodo bakar bat. Nodo hau calle da 'root' zuhaitza. Diagrama gainean Eraiki baino lehen, edo berri bat marraztu zuhaitz bitar bat irudikatze kutxak-eta-geziak duzula balioa 7 eta, ondoren, ezker 3, orduan eskubidea 9, eta, ondoren, 6 3 eskubidea. " Ikus dezagun hori guztia gogoratzen dut nire burua. Beraz, hau da gure root hemen izango da. Erakuslea nonbait izango dugu, root deituko dugun zerbait, eta lasaia hau seinalatuz. Orain nodo berria egiteko, zer dugu 3 ezkerretik? 3 nodo berri bat, beraz, eta hasiera batean adierazi du null. Besterik ez dut jarri N. Orain 7 ezkerreko joan egin nahi dugu. Beraz, erakuslea hau aldatu dugu orain guy hau seinalatu. Eta gauza bera egin dugu. 9 hemen nahi dugu hasiera batean besterik ez dio null. Hau erakuslea, eta 9 puntu aldatzeko ari gara, eta, gaur egun, 6 3 eskubidea jarri nahi dugu. Beraz, - egin, 6. Eta lasaia ez dagoela seinalatu egingo. Ongi da. Beraz, galdetzen digu egin. Orain dezagun terminologia batzuk baino gehiago joan. Zuhaitzaren erro nola zuhaitzean nodo top-gehienak buruz hitz egin dugu dagoeneko. Bat duten 7. Zuhaitzaren beheko nodoak deitzen dira hostoak. Duen edozein besterik ez ditu bere seme-alabak gisa null nodo hosto bat da. Beraz, posible da, gure binary zuhaitz bakarra nodo bat baldin bada, zuhaitz baten hosto bat da, eta hori da. "'Zuhaitza' altuera Hops kopurua egin duzu goitik hosto bat lortzeko ". Lortuko dugu sartu, bigarren batean, diferentzia bitarra orekatua eta desorekatua zuhaitzen artean, baina orain, zuhaitz honen altuera, oro har Esan 3 nuke, zenbatu dituzu Hops kopurua nahiz 9 lortu ahal izateko egin behar duzu, eta gero benetan soilik 2-ko altueran. Oraintxe desorekatua binary zuhaitz bat da, baina orekatua dugu hitz garrantzitsuak izan egingo du. Beraz, gaur egun zuhaitz baten nodo buruz hitz egin ahal izango dugu terminoetan erlatiboa zuhaitzean nodo beste. Beraz, gaur egun, gurasoak, seme-alabak, anai-arrebak, arbasoek eta ondorengoek dugu. Pretty sen dira, zer esan nahi dute. Galdetzen badugu gurasoek. Beraz, zer da 3 gurasoa da? [Ikasleak] 7. >> Bai. Gurasoa besterik ez da eta zer puntu izango da. Orduan, zer dira 7 seme-alabak? [Ikasleak] 3 eta 9. >> Bai. "Seme-alabak" literalki esan nahi seme-alabak, 6, beraz, ez litzateke aplikatuko, grandchild bat bezalakoa delako. Baina orduan joaten gara ondorengoak izanez gero, eta, beraz, zer 7 ondorengoak dira? [Ikasleak] 3, 6 eta 9. >> Bai. Erroko nodoa ondorengoak dena izango da, zuhaitza, agian izan ezik erroko nodoa bera, ez baduzu nahi duten ondorengoa kontuan hartu behar dira. Eta, azkenik, arbasoak, eta, beraz, kontrako norabidean. Beraz, zer dira 6 arbasoen? [Ikasleak] 3 eta 7. >> Bai. 9 ez dago barne. Besterik ez da zuzena leinu erro atzera zure arbasoek izango. "Bitarrak zuhaitz bat da, 'agindu' esaten dugu, bada, zuhaitza nodo bakoitzean, bere ezker ondorengoak balio txikiagoan dituzte eta eskubidea dira guztiak handiagoa dute balio. Esate baterako, zuhaitz gainetik dago ordenatuta, baina ez da posible bakarra antolaketa agindu ". Dugun aurretik, agindu bitar zuhaitz da, baita ere, bilaketa bitarra zuhaitz bat bezala ezagutzen da. Hemen deituz bat agindu bitar zuhaitz gertatuko dugu, baina inoiz ez dut entzun binary zuhaitz bat agindu aurretik deitu zion, eta galdetegi bat askoz ere litekeena da bilaketa zuhaitz bitarraren jarri gara. Bat eta bera dira, eta garrantzitsua da ezagutzen duzun zuhaitz bitarra eta bitarra bilaketa zuhaitz arteko bereizketa. Binary zuhaitz bat zuhaitz bat besterik ez da, bi gauza puntuak. Nodo bakoitzak bi gauza adierazi. Adierazi du balioak buruzko arrazoibidea ez da. Beraz, nahi baino gehiago hemen, bilaketa zuhaitz bitar bat da geroztik, joan badugu 7 utzi badakigu, ondoren ahal izango dugu ziurrenik iritsiko balio guztiak 7 utzi egingo dute 7 baino txikiagoa izan. Hasiera baino gutxiago 7 balore guztiak dira, 3 eta 6. Horiek guztiak 7 ezkerreko. 7 eskubidea dugu joaten bada, dena 7 baino handiagoa izan behar du, beraz 9 7 eskubidea da eta, beraz, onak gara. Zuhaitz bitar bat ez da kasua, ohiko zuhaitz bitar bat besterik ez dugu goian, 7 ezkerraldeko 3, 7 ezkerreko 9; ez balio inolako ordena. Orain, ez dugu benetan egiten da lapurtera eta alferrikako delako, baina "saiatu hainbat agindu zuhaitzak marraztu dezakezu pentsatzen zenbakiak 7, 3, 9, eta 6. Zenbat desberdin moldaketak daude? Zein da bakoitzaren altuera? " Pare bat egin dugu, baina ideia nagusia da, zuhaitz bitar bat balio hauek duten ordezkaritza bakarra ez da. Guztiak behar dugu, zuhaitz batzuk bitarrak dituen 7, 3, 6, eta 9. Beste ahalik eta baliozko bat root 3 izango litzateke, ezkerretara joan eta 6 da, ezkerrera joan eta 7 da, ezkerrera joan eta 9 da. Hori primeran baliozko bitar bilaketa zuhaitza da. Ez da oso lagungarria, lotuta zerrenda bezala delako eta erakusleak horiek guztiak ez dira besterik gabe, null. Baina baliozko zuhaitz bat da. Bai? [Student] Ez balioak eskubidea on handiagoa izan behar du? Edo da hau? >> Horiek beste modu batera joateko esan nahi dut. Dago ere bai, dezagun piztu dela. 9, 7, 6, 3. Good harrapaketa. Du, hala ere, zer bitar zuhaitz bilaketa suposatzen da egin errespetatu. Beraz, dena ezkerreko edozein nodo baino gutxiago izan behar ditu. Besterik ez izan dugu mugitu, esan, hau 6 eta hemen jarri. Ez, ezin dugu onartu. Zergatik egiten dut? Egin dezagun - Hemen 6, 7, 6 eta 3 puntu. Hau da, oraindik baliozko bitar bilaketa zuhaitz bat. Zer da oker I - Ikus dezagun etorri naiz antolaketa batekin. Bai, ados. Beraz, zer da okerreko Zuhaitz hau? Nik dagoeneko eman duzu zerbait gaizki iradokizun bat asmatzen dut. Zergatik egiten dut? Ongi da. Badirudi arrazoizkoa. Nodo bakoitzean, 7 bezala eta, ondoren, ezkerreko 7 begiratuz gero, 3. Beraz, 3 ditugu, 3 eskubidea gauza bat da 6. Eta 6 begiratzen baduzu, 6 eskubidea gauza bat eta 9. Beraz, zergatik ez da baliozko bitar bilaketa zuhaitza? [Ikasleak] 9 oraindik 7 ezkerreko. >> Bai. Egia ziurrenik dezakezu ezkerreko 7 joan iristeko balio guztiak 7 baino gutxiago izan behar da. Joaten gara 7 geratzen bada, 3 eta 6 eskuratu ahal izango dugu, oraindik ere, eta 9 oraindik ere eskuratu ahal izango dugu, baina ondoren desagertu baino 7 gutxiago, , 7 baino handiagoa da kopuru hori lortzeko gai izan behar dugu. Beraz, hau ez da baliozko bitar bilaketa zuhaitza. Nire anaia benetan elkarrizketa galdera bat izan izan zen, funtsean, hau da, kodea zerbait baliozkotzeko sortu zuhaitz bat edo bilaketa zuhaitz bitar bat da, eta, beraz, egin zuen lehen gauza izan zen ikusteko, egiaztatu ezkerreko eta eskuineko zuzena bada, eta, ondoren, batetik bestera joateko hor behera. Baina ezin duzun hori egiteko; pista jarraitu behar duzu Izan ere, orain dela utzi 7 dut joan, Azpizuhaitza hau guztia 7 baino txikiagoa izan behar du. Algoritmoa zuzena behar segimendua egiteko mugetatik kanpo balioak ziurrenik erori sartu Ez dugu horien guztien bidez. Polit bat errepikatze aldean, hau da, dugu, nahiz eta ez duten ahaztuak, edo ez ditugu horiek, zenbat benetan dira definituz. Beraz, horietako 14 daude. Nola egin nahi duzun ideia matematikoki bezala, bakar bat hauta dezakezu erroko nodoa izango da, eta, ondoren, pick I 7 erroko nodoa izango da, egongo dira, adibidez, zenbaki batzuk izan nire ezker nodo joan eta nire eskuineko nodo izan daiteke zenbaki batzuk daude, baina I guztira zenbakiak, ondoren, ezkerrera joan zenbatekoa bada n gehi zenbatekoa eskuinera joan ahal izango da N - 1. Beraz, gainerako zenbakiak, bai ezkerrera edo eskuinera joateko gai izan behar dute. Zaila dirudi, jarri dut 3 bada lehen, ondoren, dena behar du ezker joan, baina jarri badut 7, orduan gauza batzuk ezkerreko joan daiteke, eta gauza batzuk eskuinera joan daiteke. Eta '3 'lehen dena eskubidea esan nahi dut. Benetan da, besterik ez duzu pentsatu, zenbat gauza zuhaitzaren hurrengo maila joan. Eta orduan 14 izango da, edo horiek guztiak marraztu ahal izango duzu, eta, ondoren, 14 jaso ahal izango duzu. Atzera eginez hemen, "Eskatutako zuhaitz bitarrak dira cool ahal izango dugu, horien bitartez delako bilatu ordenatuko array bat baino gehiago bilatzeko modu bat, oso antzekoa da. Horretarako, hasteko, errotik dugu eta gure modu lan behera zuhaitz hostoak bidean, egiaztatuko Nodo bakoitzaren balioak balioak ari gara bilatzen aurka. Uneko nodoaren balioa balioa baino txikiagoa bada bilatzen ari gara, nodo eskubidea seme-alaba ondoan joan behar dute. Bestela, joan nodo ezker seme-alaba. Uneren batean, bai dituzu balioa aurkitu bilatzen ari zaren, edo null batean exekuta dituzu, balioa adierazten ez zuhaitza ". Aurretik izan genuen zuhaitz marraztu behar dut; duen bigarren bat hartuko dugu. Baina bilatuko 6, 10, eta 1 ala ez zuhaitza nahi dugu. Beraz, zer izan zen, 7, 9, 3, 6. Ongi da. Sortu begiratu nahi duzun, zenbakiak bilatuko 6 nahi dugu. Nola ez du algoritmoa lan? Beno, izan ere, gure zuhaitz root batzuk erakuslea. Eta erro genuke joan eta esan, balio hau bilatzen ari gara balioa berdina da? Beraz, 6 ari gara begira, beraz, ez da berdina. Beraz jarraitzea dugu, eta gaur egun esan genezake, ados, eta, beraz, 6 7 baino txikiagoa da. Esan nahi du ezker joan nahi dugu, edo eskuinera joan nahi dugu? [Student] Ezker. >> Bai. Nabarmen errazagoa da, egin behar duzun guztia zuhaitzaren nodo bat posible marraztu da eta, ondoren, don't duzu zure burua uste ordez saiatzen ados, bada gutxiago, ez joan ezkerrera edo eskuinera joan, argazki hau begira, oso argia da ezkerretik joan behar dut nodo hau da naiz I bila balioa baino handiagoa bada. Beraz, ezker, gaur egun, 3 naiz. Nahi dut - 3 balioa bilatzen dut, hau da, 6 baino txikiagoa da. Beraz, joateko eskubidea dugu, eta orain amaituko dut 6, balioa bila nabil, itzuliko naiz egia, beraz. Begiratu dut hurrengo balioa 10 da. Ongi da. Moztu - root jarraitu egingo 10 Beraz, gaur egun, da joan. Orain, 10 da, 7 baino handiagoa izan behar du, beraz, eskuinera begiratu nahi dut. Baino gehiago etorri hemen noa, 10 9 baino handiagoa izan behar du, beraz, eskuinera begiratu nahi dut. Hemen baino gehiago naiz, baina orain hemen nago null dut. Zer hit I null bada egin behar dut? [Student] itzuli gezurra? >> Bai. Ez dut aurkitu 10. 1 da kasu ia berdin-berdina izango da, izan ezik da iraulita dira joan ordez bila eskuinaldean behera, ezker hegalean behera begiratu dut. Orain benetan kodea gara uste dut. Hona hemen non - ireki CS50-tresnak eta zure bidea nabigatzeko han, baina era berean, besterik gabe egin espazioan. Izango da seguru asko, ideal egiten espazioa, espazioa delako lan dezakegu. "Lehenik eta behin, int balio duten zuhaitz bitar nodo mota definizio berria behar dugu. Boilerplate typedef azpitik erabiliz, zuhaitz bitar bat nodo bat definizio mota berri bat sortzeko. Trabatuta gelditzen bazara. . . "Blah, blah, blah. Larreina. Hargatik jarri boilerplate hemen, typedef struct nodoa, eta nodo. Bai, ados. Beraz, zer dira eremu gure nodo nahi dugu? [Student] Int, eta, ondoren, bi erakusleak? >> Int balioa, bi erakusleak? Nola erakusleak idazten dut? [Student] egitura. >> Mapan handiago sartu beharko nuke Bai, eta, beraz, egiturari nodo * utzi, eta egiturari nodo * eskuinera. Eta azken eztabaida gogoratzeko, horrek ez du zentzurik, ez du zentzurik hau da, ez du zentzurik. Recursive struct hau definitzeko, dena ez behar duzu. Ados, beraz, zein den gure zuhaitz itxura. Genuen trinary zuhaitz bat bada, orduan nodo bat izan liteke b1, b2, struct nodo * b3 bezala "Zaharregia, txikiegia agian , non b adar bat da, benetan, gehiago dut entzun, utzi, erdi-erdian, eskuineko, baina edozein dela ere. Bitarra zaintzeko besterik ez ditugu, eta, beraz, eskuinera, ezkerrera. "Orain deklaratu global nodo * aldagaiak zuhaitzaren erroan." Beraz, ez ari gara horretarako. Gauzak apur bat zailagoa da eta gehiago orokortua egiteko, ez nodo aldagai global bat izango dugu. Horren ordez, nagusia gure gauzak nodo guztiak aldarrikatu ahal izango dugu, eta horrek esan nahi du azpian, exekutatzen hasten gara Gure Contiene funtzioa eta gure txertatze-funtzioa, gure daukan ordez funtzioa besterik ez global nodo aldagai hau erabiliz, argumentu gisa zuhaitza izan dugu prozesatu da nahi dugun. Global aldagaia izatea zen ustezko gauzak errazteko. Gauza gogorragoa egin dugu. Orain, hartu minutu bat edo, beraz, gauza sort besterik ez egin, non barruan nagusia Zuhaitz hau sortu nahi baduzu, eta hori da egin nahi duzun guztia. Saiatu eta Zuhaitz hau eraikitzeko zure eginkizun nagusia. Ongi da. Beraz, ez duzu ere eraiki zuhaitz osoa oraindik. Baina inor tira sortu nuen zerbait erakusteko nola zuhaitz bat, eraikitzen hasteko daiteke? [Student] Norbaitek banging, atera nahian. [Bowden] Edonork beren zuhaitz eraikuntza eroso? [Student] Sure. Ez da egin. >> Fina da. Besterik ez dugu amaitzeko oh, gorde daiteke duzu? Hooray. Beraz, hemen dugu - oh, apur bat dut moztu. Am handitutako I? Handiagotzeko, joan. >> Galdera bat daukat. >> Bai? [Student] eta egitura definitzeko, ezer hasieratu bezalako gauzak dira? [Bowden] n. >> Ados. Beraz, hasieratu nahi duzun [Bowden] N ยบ denean, zehaztu edo noiz aldarrikatu eta egitura bat, lehenespenez ez da hasieratu; just like it aldarrikatu int bat bada. Zehazki, gauza bera da. Bere eremu banakako bakoitzean bezalakoa da zabor-balio bat izan daiteke. >> Eta definitzeko aukera ematen du - edo aldarrikatzen eta egitura ez dela modu bat hasieratu horiek? [Bowden] Bai. Beraz, laster-Hasieratzea sintaxia itxura - Ez da bi modu hau egin ahal izango dugu. Konpilatu behar dugula uste dut Ziur Clang egiteko ere ez du. Argumentu ordena dator, eta egitura, kizkur giltza horien barruan argumentuak ordena jarri duzun bezala. Beraz, bada abiarazi 9 nahi duzun eta utz null eta, ondoren, eskubidea izango null 9 izango litzateke, null, null. Alternatiba da, eta editoreak ez sintaxia hau gustatzen, eta bloke berri bat nahi dut pentsatzen, baina alternatiba da zerbait Hemen, lerro berri bat jarri dut. Esplizituki esan dezakezu, sintaxia zehatza ahaztu dut. Beraz, esplizituki dezakezu aurre izenaren arabera, eta esan, C, edo. = 9, ezkerreko = NULL balioa. Premia horiek koma izan dut asmatzen. Eskubidea = NULL, beraz, modu honetan ez duzu benetan behar struct-ordena ezagutzeko. eta hau irakurtzen ari zaren, askoz ere esplizitua da zer balio ari hasieratu. Gertatzen da hori gauza bat izango - beraz, zati handiena, C + + C. superset bat da C-kodea hartu dezakezu, mugitu C + +, eta konpilatu beharko luke. C + + onartzen ez gauza bat da, beraz, pertsona joera ez da egin behar. Ez dakit hori arrazoi bakarra jendea joera ez da egin behar izanez gero, baina kasu non erabili behar dut C + + eta, beraz, ezin dut hau erabili behar. Zerbait beste adibide bat ez da C + + da nola malloc "void *," itzultzen du teknikoki, baina,, char * x = malloc edozein dela ere esan ahal izango duzu, eta automatikoki, char * bat bota. Automatikoa cast Hori ez da gertatuko C + +. Hori ez litzateke konpilatu, eta esplizituki esan beharko zenuke char *, malloc, edozein izanda ere, char * urtu. Ez daude C eta C + + ados gauza asko, baina bi dira. Beraz, sintaxi honekin dugu. Baina nahiz eta ez genuen sintaxia duten, zer da honekin oker egon daiteke? [Student] ez dut behar dereference da? >> Bai. Gogoratu gezi dereference inplizitu bat du, eta, beraz, besterik gabe, ari gara eta egitura batekin aurre egiteko, erabili nahi dugu. struct-eremu bat barrutik. Eta denbora arrow bakarra erabiltzen dugu gertatzen da, hain zuzen ere, egin nahi dugun ondo, arrow baliokidea - hori zer ekarri litzateke erabili dut arrow bada. Da gezi-bide guztiak, dereference hau, gaur egun, naiz eta egitura bat dut, eta eremuan lor daiteke. Edo Eremu zuzenean edo dereference eta eremuan Balio hau izan behar uste dut. Baina hemen eta egitura bat besterik ez, ez da egitura erakuslea aurre naiz, eta beraz, ezin dut erabili gezi-. Baina gauza sort honetan nodo guztiak egin ahal izango dugu. Oh my God. 6, 7 eta 3. Ondoren ezarri ahal izango ditugu, gure zuhaitz adarrak, 7 izan dezakegu dute, haren ezkerreko behar 3 seinalatu. Beraz, zer egiten dugu hori? [Ikasleak, ulertezinak] >> Bai. Node3 helbidea, eta ez bada ez duzu helbidea, Orduan, besterik gabe, ez konpilatu. Baina gogoratu horiek hurrengo nodoak erakusleak. Eskubidea 9 seinalatu behar du, eta 3 6 eskubidea seinalatu behar. Nik uste dut, hau da multzo. Iruzkinak edo galdera? [Ikaslea, ulertezina] sustraia 7 izango da. Bakarrik esan dezakegu nodo * ptr = edo root = & node7. Gure helburuetarako, txertatze dira aurre dugu, beraz, zuhaitz honen bitar txertatzeko funtzio bat idatzi nahi dugu eta txertatze da ezinbestean malloc deitu Zuhaitz hau nodo berri bat sortu nahi du. Beraz, gauzak messy Izan ere, nodo batzuk Une honetan pilaketan eta beste nodo amaitzeko zeure gainean sartu dugu. Hau guztiz baliozkoa da, baina arrazoia hau egin ahal pilaketan gara adibide bat contrived, besteak beste, ezagutzen dugu delako zuhaitza da ustezko 7, 3, 6, 9 eraiki ahal izateko. Genuen hau ez bada, orduan ez genuke malloc lehenik eta behin. Pixka bat geroago ikusiko dugun bezala dugu, malloc'ing behar dugu. Oraintxe Erabat arrazoizkoa da pila jarri, baina ez dezagun hau aldatu malloc ezartzea. Beraz, horietako bakoitzak gaur egun antzeko zerbait izango nodo * node9 = malloc (sizeof (nodo)). Eta orain, gure kontrol egin behar dugu. (== NULL node9) - ez dut nahi - itzuli 1, eta, ondoren, node9> egin ahal izango dugu orain erakuslea delako, balioa = 6, node9-> utzi = NULL, node9-> right = NULL, eta horretarako nodo horietako bakoitzean izan dugu. Beraz, horren ordez, dezagun jarri barruan aparteko funtzioa. Dezagun nodo * build_node Huffman kodeketa APIak eskaintzen dugu zertxobait antzekoa da. Ematen dugu initializer funtzioak zuhaitz baten deconstructor "funtzio" horiek zuhaitzak eta basoak berean. Beraz hemen initializer-funtzio bat izan dugu besterik ez eraikitzeko Gurekin nodo bat. Eta pretty askoz ere itxura zehazki hau atsegin dute. Eta are dut alferrak izan da, eta ez, aldagaiaren izena aldatu, nahiz eta node9 ez du zentzurik jada. Oh, node9 balio uste dut behar ez izan 6. Orain node9 itzuli ahal izango dugu. Eta hemen itzuli null behar dugu. Guztiek build-a-nodo funtzio hori ados? Beraz, gaur egun besterik ez diegu balio bat eman eta erakusleak null nodo edozein eraikitzeko. Orain deitzen dugu, nodo * node9 = build_node (9) egin ahal izango dugu. Eta utzi egin. . . 6, 3, 7, 6, 3, 7. Eta orain ezarri nahi dugu, bera erakusle Orain dela izan ezik guztia erakusleak dagokionez dagoeneko beraz, ez da gehiago behar helbidea. Ongi da. Beraz, zer egin nahi dut azken gauza? Errorea gertatu da egiaztapena naiz ez dut egiten. Zer da nodo bueltan eraiki du? [Ikaslea, ulertezina] >> Bai. Malloc bada huts egin du, eta itzuli null duzu. Beraz, lazily hemen jarri ordez, bakoitzaren baldintza bat egiten dut. (Node9 == NULL, edo are errazagoa, hau da, besterik ez bada ez node9 baliokidea. Beraz, ez bada node9, edo ez node6, edo ez node3, edo ez node7, itzuliko 1. Agian inprimatu malloc huts egin du, edo zerbait behar dugu. [Student] faltsua baita null berdina al da? [Bowden] Edozein zero balioa faltsua da. Beraz, null balioa zero da. Zero balioa zero da. False balioa zero da. Edozein - pretty askoz bakarra 2 null balioak zero dira eta zero, faltsua besterik ez da hash zero bezala definitzen da. Hori ere aplikatzen global aldagai aldarrikatu ezean. Genuen nodo * root Hemen bada, ondoren, aldagai global buruz gauza polita da beti hasierako balioa dutela. Hori ez da egia nola, funtzio barruan, hemen, badugu, adibidez, nodoak * edo nodoaren x. Ez daki zer x.value, x.whatever ditugu, edo inprimatu izan dugu eta arbitrarioak izan dira. Hori ez da egia aldagai global. Beraz, erroko nodoa edo nodoaren x. Berez, hori guztia global, ez bada esplizituki balio batzuk hasieratu bere balioa zero balioa du. Hortaz, hona hemen, nodoen * root, ez dugu esplizituki hasieratu da ezer, beraz, bere balio lehenetsia null izango da, erakusleak balioa zero da. X-en balio lehenetsia da x.value dela zero esan nahi du, da x.left null, eta x.right null da. Beraz, geroztik, eta egitura bat da, struct, eremu guztietan zero balio izango da. Guk ez dugu hemen erabili behar da, nahiz eta. [Student] structs desberdinak dira beste aldagai batzuk baino, eta beste aldagai zabor balio; zeroen dira? [Bowden] Beste balioak ere. Beraz, x, x zero izango da. Esparrua mundu gero, hasierako balioa du. >> Ados. [Bowden] Edo hasierako balioa edo zero eman zenuen. Nik uste dut hori guztia arduratzen da. Ongi da. Beraz, hurrengo galdera galdetzen, "Orain deitzen badu funtzio bat idatzi nahi dugu int balio boolearra prototipo bat dauka. " Ez gara boolearra int balio badu. Gure prototipoa da itxura boolearra badu (int balio. Eta gero ere ari gara pasatzen zuhaitz dela egiaztatzeko behar ditu balio duten ala ez ikusteko. Beraz, nodo * zuhaitz). Ongi da. Eta, ondoren, antzeko zerbait deitu ahal izango dugu, agian printf edo zerbait nahi dugu. Dauka 6, gure root. Hori bat, edo egia itzuli behar, badu, berriz, 5 root false itzuli behar du. Beraz, hartu bigarren hau ezartzeko. Egin dezakezu bai iteratively edo errekurtsiboki. Ezarri dugu gauzak modu buruzko gauza polita dela bera erabaki gure recursive konponbidea askoz errazagoa modu global-aldakorra baino egin. Besterik ez dugu int balio duelako, eta gero behera errekurtsibitatean subtrees inola ere ez dugu. Bereizi helper funtzioa Gurekin subtrees recurses izan nahi dugu. Baina Nik geroztik aldatu zuhaitz argumentu gisa hartu du, duten beti behar izan da, lehenik eta behin, gaur egun recurse dezakegu erraz. Beraz, joan-etorriko edo recursive, bai joan baino gehiago dugu, baina recursive amaierak ikusten dugu nahiko erraza sortu. Ongi da. Does Edozeinek zerbait lan egin ahal izango dugu? [Student] dut bat etorriko konponbidea. >> All right, joan-etorriko. Ongi da, hau itxura ona. Beraz, nahi gurekin oinez bidez? [Student] Sure. Beraz, temp aldagai bat ezarri dut zuhaitza lehen nodo lortzeko. Eta gero temp ez, berriz, berdintasuna null bidez besterik ez dut looped beraz, berriz oraindik zuhaitza, I guess. Eta balioa balioa berdina bada temp hori seinalatuz, ondoren balio hori itzultzen. Bestela, eskuin aldean edo ezker aldean bada egiaztatzen. Al duzu inoiz bada, egoera bat non zuhaitz gehiago ez da, ondoren itzultzen du - begizta da irteera eta false itzultzen du. [Bowden] Larreina. Beraz, badirudi ona. Edonork ezer iruzkinak edozein? Ez dut zuzentasuna iruzkin guztiak. Gauza bat egin ahal izango dugu, hau da lasaia. Oh, little longish bat joan da. Dela konpondu dut. Ongi da. Pertsona orok lanak nola hirutarra adibidez gogoratu behar da. Han behin betiko iraganean galdetegiak ematen dizu, hirutarra adibidez operadore funtzio bat, eta esan, hau da, itzuli, egin erabiltzen ez duen zerbait, hirutarra adibidez. , Beraz, hau kasu oso ohikoa da pentsatzea, hirutarra adibidez erabili nahi nuke, non, baldintza batzuk ezarri aldagai bat, zerbait bestela, beste zerbait ezarri aldagaia bera. Zerbait maiz gauza sort honetan sartu daiteke eraldatu non ezarri aldagaia - edo, eta bai, egia da hau? Ondoren, hau, bestela. [Student] lehenengoa da egia, ezta? [Bowden] Bai. Irakurri dut beti, hau da, aldi baterako balio temp balioa baino handiagoa berdin, gero, bestela hau. Galdera bat eskatuz. Da handiagoa? Ondoren, lehenengo gauza egin. Bestela, bigarren gauza egin. Ia beti I - colon, I just - nire buruan, irakurri bestela. Does Edozeinek recursive konponbide bat? Ongi da. Hau dugu dagoeneko handia izan da, baina hobeto ere egin dugu. Pretty askoz berean ideia zehatza. Besterik ez da, bai, ez azaldu nahi al duzu? [Student] Sure. Beraz, ziurtatu zuhaitza ez dago null lehen egiten ari gara, Zuhaitzaren null gero false itzuli dugu aurkitu ez delako delako joan. Eta badago oraindik ere zuhaitz bat, sartu dugu lehen egiaztatu dugu balioa uneko nodoaren bada. Itzuli egia bada, eta ez bada recurse ezkerrera edo eskuinera. Soinu egokia eta horrela, ez? >> Mm-hmm. (Hitzarmena) Beraz, hau da, ia - egituraz etorriko konponbidea oso antzekoa da. Besterik ez da ordez errekurtsibitatean, berriz, begizta bat izan genuen. Eta oinarri kasuan hemen non zuhaitz ez berdinak null baldintza pean hautsi dugu, berriz, loop zen. Oso antzekoak dira. Baina urrats bat gehiago hartu dugu. Orain, gauza bera egiten dugu. Iragarki bi lerro hauek gauza bera itzultzen ari gara, izan ezik argumentu bat desberdina da. Beraz, hirutarra adibidez batean goaz. Aukera zerbait hit dut, eta sinbolo bat egin du. Ongi da. Beraz itzuli dugu hori. Hau da, lerro bat baino gehiago izan lortzean, bai, da handitutako. Normalean, gauza bat estilistiko gisa, ez dut uste jende askok arrow ondoren espazio bat jarri, baina Oraindik koherentea izanez gero, isuna da asmatzen dut. Balioa zuhaitz-balioa baino txikiagoa bada, zuhaitz-ezkerrean recurse nahi dugu, bestela, zuhaitz eskubidea recurse nahi dugu. Beraz, urrats bat izan zen itxura hau txikiagoa eginez. Urratsera itxura hau txikiagoa eginez bi - hau bereizteko ahal izango dugu lerro bat baino gehiago. Ongi da. Txikiagoa itxura egiteko bi urratsa da hemen, beraz, itzulitako balioa zuhaitz balio berdinak, edo edozein dela ere badu. Garrantzitsuena bat da. Ez nago ziur esan zuen esplizituki klase bada, baina zirkuitu-laburrik eragin ebaluazioa. Hemen ideia balioa == zuhaitz balio. Hori egia bada, orduan hau da egia, eta nahi dugu 'edo' edozein da hemen. Beraz, are gehiago, edozein dela ere hemen da pentsatu gabe, zer da adierazpen osoa itzuli egingo da? [Student] True? >> Bai, ezer egia delako, gauza or'd or'd - edo egia da derrigorrez egia da. Beraz, ahalik eta azkarren bueltan balioa = zuhaitz balioa ikusten dugun bezala, ari gara egia itzuli. Ere ez recurse joan lerroa gehiago dauka. Urrats bat gehiago hartu ahal izango dugu. Zuhaitz Return null ez berdinak, eta hori guztia. Funtzio bat-line egin. Zirkuitu-laburrik eragin ebaluazio hori ere adibide bat. Baina orain ideia bera da ordez, beraz, ez da berdina null ez bada zuhaitz - edo, eta bai, , zuhaitz berdinak null ez bada, kasuan txarra da, zuhaitz berdinen null bada eta, ondoren, lehen baldintza da faltsua izango da. Beraz, faltsuak ezer anded zer izango da? [Student] False. >> Bai. Zirkuitu-laburrik eragin ebaluazio beste erdia, non zuhaitz ez berdinak null ez bada, orduan ez du ari gara, nahiz eta joan egingo edo, zuhaitz berdinak null ez badu, orduan ez du ari gara balioa == zuhaitz balio du. Besterik ez gara berehala itzultzeko faltsua. Zein da, bada geroztik ez da zirkuitu-laburrik eragin ebaluatzeko, gero, zuhaitz berdinak null ez bada, bigarren baldintza hori seg errua, zuhaitz-> balioa null dereferencing delako. Beraz, hori. Hau egin ahal izango filmea behin baino gehiago. Hau oso ohikoa da gauza bat da, gainera, ez da honekin lerro bat egiteko, baina baldintza gauza komun bat da, agian ez da hemen, baina (zuhaitz! = NULL, eta zuhaitz-> balioa == balioa), ez bada edozein izanda ere. Hau oso ohikoa den egoera bat da, non ez izatearen ordez apurtu bi IFS, non bezala, zuhaitz null da? Ados, ez da nulua, eta, beraz, gaur egun zuhaitz balio balio berdina da? Do hau. Horren ordez, egoera honetan, hau ez da inoiz errua seg apurtu delako honetan gertatzen null izan nahi izanez gero. Beno, uste dut zure zuhaitz erakuslea guztiz baliogabea bada, oraindik daiteke errua seg baina ezin du errua seg zuhaitz null bada. Ziren null bada, hausteko litzateke zara inoiz erakuslea dereferenced aurretik lehenik eta behin. [Student] alferrak ebaluazioa izenekoa da? [Bowden] Lazy ebaluazio beste gauza bat da. Lazy ebaluazioa da, gehiago balio bat eskatu bezala, balioa, mota horretako kalkulatzeko eskatu duzu, baina ez duzu behar berehala. Beraz, benetan behar duzun arte, ez da ebaluatu. Hau ez da zehazki gauza bera, baina Huffman pset dugun "lazily" idatzi dio. Arrazoia egiten dugu ari gara benetan delako idazteko Bufferreratzen ez dugu nahi banakako bit idazteko aldi berean, edo aldi berean banakako bytes, ordez nahi dugu bytes zatia bat lortzeko. Ondoren dugu, byte zatia behin, gero idatzi dugu. Nahiz eta galdetzen idatzi eta fwrite eta gauza sort fread gauza bera egin zuen. Zure irakurtzen eta idazten du bufferreko dute. Nahiz eta galdetu berehala idatzi, ziurrenik ez. Eta ezin duzu ziurtatu gauza idatzi egingo da deitu hfclose arte edo dena delakoa da, eta gero dio, ados, nire file dut itxi, horrek esan nahi du hobe dut idazten dena ez dut idatzi gabe. Ez du behar dena idazteko ari zaren fitxategia arte itxi, eta, ondoren, behar da. Beraz, besterik gabe, zer alferrak - gertatu arte itxaroten da. - Hartu 51 eta xehetasun gehiago sartu dituzu joan 51 OCaml eta dena, dena delako errekurtsio da. Ez dago irtenbideak ez dira etorriko, batez ere. Dena errekurtsio, eta ebaluazio alferrak garrantzitsua da, egoera asko gertatzen non, ez baduzu lazily ebaluatzeko, zela esan nahi Adibidez errekak, infinituki luzea da. Teorian, natural gisa 1-2-3-4-5-6-7 korronte zenbakiak dezakezu uste, Beraz lazily ebaluatu gauzak fina dira. Diot hamargarren kopurua nahi dut, eta, ondoren, ebaluatzeko sortu dut hamargarren kopurua. Nahi dut hundredth kopurua bada, orduan ebaluatzeko sortu dut kopurua hundredth. , Ebaluazio-alferrak gabe, eta gero zenbaki guztiak ebaluatzeko berehala saiatuko da. Infinituki askotan zenbakiak ari zara, ebaluatzen, eta hori ez da posible. Beraz, egoera asko daude non alferrak ebaluazioa besterik ez da gauzak lan egiteko ezinbestekoa da. Orain txertatze idatzi nahi dugu, non txertatze izango da era berean, haren definizioa aldatzen ari da. Beraz, oraintxe txertatze-boolearra (int balioa). Aldatu boolearra txertatze (int balioa, nodoak * zuhaitz) goaz. Benetan ari gara berriro aldatu pixka bat, ikus zergatik dugu. Eta let mugitu build_node, demontre, goian sartu ez dugu, beraz, funtzio-prototipo bat idazteko. Zein aholku bat zarela erabiltzen ari build_node txertatze. Ongi da. Hartu minutu bat dela. Berrikusketaren gorde dut uste dut, nahi duzun hori zabaltzen bada, edo, gutxienez, gaur egun egin nuen. Apur bat break txertatze logika pentsatu nahi dut, ezin baduzu pentsatu. Funtsean, bakarrik izango duzu inoiz izango hostoak tartekatuz. Like txertatzeko I 1 bada, ondoren, ezinbestean dut sartzearen 1 - Beltza aldatu dut - I'll dira 1 txertatu hemen. Edo txertatu I 4 bada, behar bezala 4 hemen baino gehiago nahi dut. Ez dio axola zer egin nahi duzu, beraz, hosto bat txertatu duzu. Guztiak egin behar duzun da, batetik bestera joateko behera zuhaitz nodo iritsi arte nodoaren guraso, berriak nodo guraso izan behar du, eta, ondoren, bere ezkerrera edo eskuinera erakuslea aldatu, edo ez arabera baino handiagoa edo uneko nodo baino txikiagoa da. Aldatu erakuslea, zure nodo batetara. Beraz, batetik bestera joateko zuhaitz, hosto-puntua nodo berria. Era berean, zergatik duten egoera mota debekatzen aurretik pentsatzen, zuhaitz bitarrak non eraiki dut, non zuzena izan zen nodo bakar bat baldin bada bakarrik begiratu, baina 9 7 ezkerreko iterated behera modu guztiak. Egoera honetan ezinezkoa da, beraz, geroztik pentsatu 9 edo zerbait txertatzea; oso nodo lehen, 7 ikusteko eta besterik ez dut eskuinera joango naiz. Beraz, zer egin dut axola ez banago, hosto bat joan txertatu, eta hosto bat algoritmoa egokia erabiliz, ezinezkoa 9 me sartu 7 ezkerreko bezain laster hit I 7 eskuinera joan naiz dudalako joan. Does Edozeinek hasteko zerbait? [Student] egiten dut. >> Sure. [Ikaslea, ulertezina] [Beste ikaslea, ulertezina] [Bowden] da estimatzen. Ongi da. Azaldu nahi duzu? [Student] geroztik dugun txertatu badakigu zuhaitzaren amaieran nodo berriak, Looped Zuhaitz bidez iteratively nodo bat dela adierazi null dut lortu arte. Eta gero, erabaki nuen, bai eskuineko aldean edo ezkerraldean ipini aldagai hau erabiliz; esan zidan non jarri. Eta gero, funtsean, egin dut azken hori temp nodo duten nodo berriak sortzea zen, edo ezkerreko aldean edo eskuineko aldean, zer balioa arabera. Azkenik, nodoa bere egiaztatze balioa balioa ezarri dut. [Bowden] Ongi da, eta, beraz, gai bat ikusten dut hemen. Bidean% 95 bezalakoa da. Bat gai ikusten dut, bai, inork ez ikusteko arazo bat? Zer da inguruabar pean apurtzen dute Begizta? [Student] temp null bada? >> Bai. Beraz, nola apurtu Begizta temp null bada. Baina, zer egin behar dut hemen? I dereference temp, den ezinbestean null. Beraz, beste gauza egin behar duzun ez da bakarrik gorde pista temp null arte, segimendua egiteko, gurasoaren uneoro nahi duzun. Ere nahi dugu nodo * guraso, null at mantendu ahal izango dugu lehen uste dut. Portaera bitxi hori zuhaitzaren erro baina hori lortu dugu. Balioa edozein dela ere baino handiagoa bada, orduan aldi baterako = temp eskubidea. Baina egin aurretik, parent = temp. Edo gurasoak dira beti berdinak temp? Kasua dela? Temp null ez bada, ondoren, behera, eta ez du axola zer noa, nodo temp guraso da. Beraz, gurasoen temp izango du, eta, ondoren, temp mugitzen I behera. Orain temp null da, baina guraso gauza dela null guraso puntu. Beraz, behera hemen, ez dut nahi ezartzeko eskubidea funtzioak 1 itzultzen du. Beraz, eskubidea joan nintzen, eta, beraz, eskuineko = 1 bada, eta uste dut egin nahi duzun ezkerrera mugituko zara, gero, eskuinera eta 0 berdinak ezarri nahi duzu. Edo, bestela, inoiz eskubidea mugitzeko. Beraz, eskuineko = 0. = Eskuineko 1 bada, guraso eskuineko erakuslea newnode egin nahi dugu, guraso ezkerreko erakuslea newnode beste egin nahi dugu. Horri buruzko galderak? Ongi da. Modua dugu, beraz, hau da, ondo, egia esan, lan hau egiteko ordez, erdi espero dugu build_node erabili behar duzu. Eta gero newnode berdinen null bada, faltsua itzuliko. Hori da hori. Orain, hau da, zer egin ahal izango duzu espero dugu. Hau da, langileek irtenbideak egin. Ados ez dut horri buruz going "eskubidea" modu gisa baina hori guztiz fina eta lan egingo du. Gauza bat gaur egun, apur bat arraro eskubidea da zuhaitza hasten bada null, null zuhaitz gainditu dugu. Araberakoa nola null zuhaitz batean pasatzen portaera definitzeko uste dut. Uste bada pasatzen zuhaitz bat null nuke, ondoren zuhaitz bat null balioa txertatu return zuhaitz bat non soilik balioa nodo bakarra dela. Do duten pertsonen ados? Dezakezu, nahi izanez gero, , zuhaitz bat null pasatzen bada eta nahi duzun balio bat sartu da, itzultzeko faltsua. Da sortu nahi duzun definitzeko. Lehenik eta behin, eta esan nion, orduan egin ondo, arazoak egiten ari zaren joan, zeren errazagoa izango litzateke gauza erakuslea global bat izan genuen, baina ez dugu, eta, beraz, zuhaitz null bada, ez dago ezer horri buruz egin ahal izango dugu. Besterik ez dugu itzultzeko faltsua. Beraz txertatze aldatu dut. Izan teknikoki dugu aldatzeko eskubide hori hemen, gauzak nola baino gehiago errepikatzean, baina txertatze aldatu ** zuhaitz nodo bat hartu dut. Bikoitza erakusleak. Zer esan nahi du horrek? Nodo erakusleak aurre ordez, gauza dira manipulatzeko noa erakuslea da. Erakuslea hau manipulatzeko noa. Dira manipulatzeko erakusleak zuzenean noa. Honek zentzua du, behera pentsatu geroztik ondo, oraintxe bertan puntu hau null. Zer egin nahi dut manipulatzeko erakuslea hau ez null seinalatu. My new nodo seinalatu nahi dut. Dut pista erakusleak nire erakusleak, orduan ez behar dut segimendua egiteko, guraso erakuslea. Bakarrik gorde ahal izango dut pista erakuslea da null bada seinalatuz, eta erakuslea apuntatzen bada null aldatu nahi dut nodo seinalatu. Eta hori aldatu ahal izango dut Erakuslea erakuslea baita. Eskubide hori gaur egun. Benetan egin dezakezu errekurtsiboki nahiko erraz. Ez hori egin nahi dugu? Bai, egiten dugu. Ikus dezagun Errekurtsiboki. Lehenik eta behin, gure base kasuan izango da? Ia beti gure oinarria kasuan, baina, benetan, hau delikatua mota da. Lehen gauzak lehen, bada (zuhaitz == NULL) Besterik ari gara false itzuli uste dut. Hau da zure zuhaitz null izatetik ezberdina. Hau zure root erakuslea null izateaz erakuslea da Horrek esan nahi du zure root erakuslea hori ez da existitzen. Beraz, behera hemen, ez badut nodo * - dezagun berrerabiltzea hau. Nodo * root = NULL, eta, ondoren, txertatze deitu antzeko zerbait egiten dut, sartu & root sartu 4. Beraz, eta root root nodo * ondoren eta root nodo ** bat izango da. Baliozkoa da. Kasu honetan, zuhaitz, hemen, zuhaitz ez da null - edo txertatze-. Hemen. Zuhaitz ez da null; * zuhaitz null, hau da, isuna * zuhaitz null bada, orduan delako manipulatu ahal izango dut orain zer puntutaraino nahi dut seinalatu. Baina zuhaitz null bada, horrek esan nahi du, izan zen besterik ez dut hemen, eta hau esan null. Horrek ez du zentzurik. Ezin dut ezer egin duten. Zuhaitz null bada, faltsua itzuliko. Beraz, funtsean, esan zuen dagoeneko dut zer da gure benetako oinarria kasuan. Eta zer da hori? [Ikaslea, ulertezina] [Bowden] Bai. Beraz, (* zuhaitz == NULL). Kasuan erlazionatzen hemen non nire gorria erakuslea erakusleak bada dut arreta, erakuslea hau bezalako bideratuta dut, gaur egun dut erakuslea honen ardatz hartzen. Orain erakuslea honen ardatz hartzen dut. Beraz, nire erakuslea gorria, hau da, nire nodo ** beti * izanez gero, nire gorria erakuslea da, inoiz null, horrek esan nahi du kasu, non erakuslea puntu bideratua dut I am erakuslea hosto bat da. Erakuslea hau aldatu nahi dut nire nodo batetara. Come back hemen. Nire newnode nodo * n = build_node (balioa) ondoren, n, n = NULL bada, faltsua itzuliko. Bestela, zer erakuslea da gaur egun zuzentzen duen aldatu nahi dugu Gaur egun, gure eraiki berri den nodo seinalatu. Benetan egin ahal izango dugu hemen. N esaten ordez, esan * zuhaitza = * zuhaitz bada. Pertsona orok ulertzen? Hori erakusleak erakusle aurre, null erakusleak aldatu ahal izango dugu, gauza horiek seinalatu nahi dugu. Hori gure base kasu. Orain gure errepikatze, edo gure errekurtsio egin dugu egiten beste recursions guztiak oso antzekoa izango da. Balioa txertatu nahi dugu, eta, gaur egun, hirutarra adibidez berriro erabiltzeko naiz joan, baina gure egoera zein izango da? Zer da ari gara bilatzen dugu ezkerrera edo eskuinera joan nahi duen ala ez erabakitzeko? Egin dezagun urrats desberdinetan. (Balioa <) bada, zer? [Student] zuhaitza balio? [Bowden] Beraz, gogoratzen naiz I gaur egun - [Ikasleak, ulertezina] [Bowden] Bai, eta, beraz, hementxe, demagun gezi berdeak hori zer zuhaitz Gaur egun, adibide bat da, erakuslea hau erakuslea da. Beraz, horrek esan nahi du 3 erakuslea erakuslea naiz. Dereference birritan sounded good. Zer I - nola ez egin behar dut? [Student] Dereference behin, eta, ondoren, egin arrow bide horretatik? [Bowden] Beraz, - (* zuhaitz) dereference behin,> balio me naiz I zeharka seinalatuz nodo balioa emateko. Beraz, ezin dut idatzi tree.value ** nahiago baduzu. Edo lan egiten du. Hori horrela bada, orduan balio txertatzeko deitu nahi dut. Eta zer da nire nodo eguneratzen da ** izango da? Ezkerrera joan nahi dut, eta, beraz, ** tree.left izango da nire ezker. Eta gauza erakuslea nahi dut beraz, ezker eta ondorioz sortu bada null erakuslea da, Aldatu ahal ditut nire nodo batetara. Eta beste kasua oso antzekoa izan daiteke. Dezagun benetan nire hirutarra adibidez oraintxe. Txertatu balioa balioa bada <(** zuhaitz). Balio. Ondoren, ezkerreko gure ** eguneratu nahi dugu, bestela, gure eskubidea ** eguneratu nahi dugu. [Student], hori lortzeko erakuslea erakusleak? [Bowden] Gogoratu - ** tree.right nodo izar bat da. [Ikaslea, ulertezina] >> Bai. ** Tree.right erakuslea hau edo antzeko zerbait da. Erakuslea hartu ahal izateko, ematen dit nahi dudana guy hori erakuslea. [Student] Ezin izan baino gehiago gara berriro zergatik bi erakusleak erabiltzen ari gara? [Bowden] Bai. Beraz, - no, ahal izango duzu eta konponbidea hori baino lehen bi erakusleak egin gabe egiten modu bat izan zen. Bi erakusleak erabiltzen ulertzeko gai izan behar duzu, eta garbiagoa hau irtenbide bat da. Era berean, konturatu, zer gertatzen den nire zuhaitz bada zer gertatzen den nire root zen null bada? Zer gertatzen da kasu honetan bada egin behar dut hemen? Beraz, nodo * root = NULL, sartu & root sartu 4. Zer da root honen ondoren izango da? [Ikaslea, ulertezina] >> Bai. Root balioa 4 izango da. Root ezker null izango da, root eskubidea null izango da. Kasu honetan, non ez genuen gainditu root helbidea, ezin dugu aldatu root. Kasu honetan, non zuhaitz non root null, false itzuli izan dugu. Ez dago ezer egin ahal izan genuen. Nodo bat zuhaitz hutsa ezin dugu sartu. Baina orain ezin dugu hutsik egin besterik ez dugu zuhaitz bat, zuhaitz bat-nodo batean. Zein da normalean espero duela ustezko lan. Horrez gain, hau da, baino nabarmen laburragoa gurasoa ere jarraipena, eta, beraz, behera batetik bestera joateko modu guztiak. Orain nire guraso izan dut, eta aski izango da nire guraso eskubidea edozein erakuslea. Horren ordez, egin dugu, hori izanez gero iteratively, begizta bat, berriz, ideia bera izango da litzaidake. Baina ordez, nire guraso erakuslea aurre egiteko beharrik, ordez nire oraingo erakuslea gauza izango litzateke naiz I zuzenean nire nodo batetara aldatzea. Nik ez dut ezker ala ez seinalatuz aurre egiteko. Ez daukat eskubidea ala ez seinalatuz aurre egiteko. Besterik ez da edozein erakuslea hau da, nire nodo batetara ezarri nahi dut joan. Pertsona orok du ulertzen nola funtzionatzen duen? Ez bada, zergatik egin nahi dugu modu honetan, baina, gutxienez, hori irtenbide bat lan? [Student] Nora egin egia itzuliko gara? [Bowden] Hori da ziurrenik hemen. Behar bezala sartu dugu bada, itzultzeko egia. Bestela, behera hemen edozein izanda ere txertatze itzultzen itzuli nahi dugu. Eta zer da berezia hau recursive funtzioa? Buztana errekurtsiboa da, eta, beraz, luze optimizazioa batzuk konpilatu dugun bezala, hori ezagutu egingo du, eta ez du inoiz izango duzu gainezkatzea pila bat lortu honetako nahiz eta gure zuhaitza 10.000 edo 10 milioi altuera du. [Ikaslea, ulertezina] [Bowden] Dash at uste dut edo zer optimizazio maila da buztana errekurtsio onartu behar da. Ohartuko da uste dut - GCC eta Clang beren optimizazio maila esanahi desberdinak ere izan. DashO 2, buztana errekurtsio konturatu egingo da ziur esan nahi dut. Baina bat Fibonocci adibidez, edo antzeko zerbait eraikitzeko. Ez da erraza hau probatzeko, zaila delako eraikitzeko zuhaitz bitar bat da, oso handia. Baina bai, DashO 2, hau da, uste dut DashO 2 konpilatu bada, buztana errekurtsio itxura izango da eta optimizatzeko out. Dezagun itzuli diskoa literalki azken gauza behar. Atzera dezagun inserto hemen non ideia bera egin behar dugu. Oraindik ere izango da, ez da oso-osorik kudeatzeko gai izan flaw erro bera null, edo iragan sarrera null, baina erakuslea gurasoaren ordez aurre egiteko, dezagun erakusleak mantentzeko logika bera aplikatzen erakusleak. Hemen bada gure nodo ** orain mantendu dugu, eta ez dugu behar segimendua egiteko eskubidea gehiago baina nodo ** orain = & zuhaitza. Eta orain, gure, berriz, loop eta * orain ez, berriz, berdintasuna null izango. Ez behar gehiago gurasoek segimendua egiteko. Ez behar ezkerreko eta eskuineko pista mantentzeko. Eta deitu dut temp ari gara, dagoeneko erabiltzen delako temp. Ongi da. Beraz, bada (balioa> * aldi baterako), gero eta (* tenp) -> eskubidea bestela, aldi baterako = & (* tenp) -> utzi. Eta orain, puntu honetan, bitartean begizta honen ondoren, Baino ez dut hau agian errazagoa delako buruz iteratively errekurtsiboki baino uste, baina bitartean begizta honen ondoren, * Aldi baterako erakuslea aldatu nahi dugu. Guraso izan aurretik, eta bai guraso ezkerrera edo guraso eskubidea aldatu nahi dugu, nahi dugu, baina guraso eskubidea aldatu nahi izanez gero, ondoren * temp, guraso eskubidea da, eta aldatzeko aukera izango dugu zuzenean. Beraz, behera hemen, * temp = newnode egin ahal izango dugu, eta hori da. Oharra Beraz, egin dugu kode lerro atera zen. Segimendua guztiak gurasoa duten ahalegina osagarria da. Hemen, besterik ez dugu mantendu bada pista erakuslea erakusleak, eta, nahiz eta horiek kizkur giltza guztiak kentzeko, orain nahi dugu, egin laburragoa itxura. Zehatza irtenbide bera da, baina kode-lerro gutxiago. Behin hau aitortzeko baliozko irtenbide gisa hasten zarenean, arrazoia buruz ere atsegin baino errazagoa da, ados, zergatik Ez daukat eskubidea int? Zer esan nahi du horrek? Oh, signifying da eskuinera joaten naiz, aldi bakoitzean ezarri behar dut bestela, joan I uzten bada zero ezarri behar dut. Hemen, ez dut horri buruzko arrazoia, besterik gabe, errazagoa da pentsatu. Zalantzak dituzu? [Ikaslea, ulertezina] >> Bai. Ongi da, eta, beraz, azken bit Bat azkar eta erraz egin ahal izango dugu funtzioa dela uste dut, let's batera, I guess, saiatu eta idatzi bat dauka funtzioa horrek ez du axola ala ez bilatu zuhaitz bitar bat. Honek funtzio egia itzuli behar hau, oro har, zuhaitz bitarra bada edozein lekutan balioa da bilatzen ari gara. Hargatik lehen egiten da, errekurtsiboki eta ondoren egin dugu iteratively. Benetan ahal izango dugu egin elkarrekin, hau da, oso laburra izan delako. Zein da nire oinarria kasuan behar du? [Ikaslea, ulertezina] [Bowden] Beraz, (zuhaitza == NULL), eta ondoren zer? [Student] itzuli faltsua. [Bowden Bestela, ondo, ez dut behar beste. Izan zen, bada nire base beste kasu. [Student] Tree balio? >> Bai. Beraz, (zuhaitz-> balioa == balioa bada. Ohartu gara berriro nodo *, ez nodo ** s? Contiene ez da inoiz behar nodo ** bat erabili ahal izateko, ari gara, ez baita erakusleak aldatzea. Ari gara traversing. Hori gertatuz gero, orduan egia itzuli nahi dugu. Bestela, seme-alabak zeharkatzeko nahi dugu. Beraz, ezin dugu ezkerreko dena gutxiago ala ez Arrazoia eta eskubidea dena da handiagoa. Beraz, gure egoera zein da hemen izango, edo zer egin dugu? [Ikaslea, ulertezina] >> Bai. Return dauka (balioa, zuhaitz-> ezker) edo dauka (balioa, zuhaitz-> eskubidea). Eta hori da. Eta zirkuitu-laburrik eragin ebaluazio batzuk, non gertatuko dugu zuhaitz ezkerreko balioa aurkitu nahi izanez gero, eskuineko zuhaitza begiratu behar dugu, inoiz ez. Hori guztia funtzioa. Orain egin dezagun da iteratively gutxiago nice izango. Nodo * orain = zuhaitz Irteeran ohiko hartu dugu. (Orain! = NULL) bitartean. Quickly arazo bat ikusteko. Orain badu - hemendik, inoiz ez dugu hautsi bada, hau da, gero exekuta dugu gauzak begiratzen, eta, beraz, itzultzeko faltsua. (Orain> balioa == balioa), itzultzeko Egia bada. Beraz, gaur egun, leku bat dugu ez dakigu ezkerrera edo eskuinera joan nahi dugu. Beraz, arbitrarioki, dezagun bakarrik utzi. , Jakina, non erabat Nik abandonatu guztia arazo bat sartu exekutatu dut Bakarrik izango dut inoiz egiaztatu zuhaitz baten ezkerretik. Inoiz ez dut ezer haurren eskubide bat da ezer egiaztatu. Nola hau konpontzeko? [Student] ezkerreko eta eskuineko pista pila batean gorde behar duzu. [Bowden] Bai. Hargatik da struct zerrenda, nodoen * n, eta, ondoren, nodo ** hurrengo? Nik uste dut ongi funtzionatzen. Hemen baino gehiago joan ezkerretara, edo let's nahi dugu. Egiturari zerrenda =, hasiko da struct zerrenda honetan out. * List = NULL. Beraz, izango da gure lotutako zerrenda subtrees saltatu dugun baino gehiago. Orain utzi Traverse dugu, baina ezinbestean eskuinera itzuli behar dugu, Eskuinaldean mantendu gure struct zerrenda barruan goaz. Ondoren new_list edo struct izan dugu, struct zerrenda, new_list = malloc (sizeof (zerrenda)). Dela error-checking alde batetara utzi dut, baina, egiaztatu bada bere null ikusi behar duzu. New_list nodo seinalatzen oh, zergatik nahi nuen hemen. Bigarren struct zerrenda bat seinalatu. Hori da, nola lotuta zerrendak lana. Int zerrenda bat lotuta berdina da ari izan ezik dugu int ordez * nodoa. Zehazki gauza bera. Beraz new_list, gure new_list nodoaren balioa, orain-> eskubidea izango da. Gure balioa new_list-> hurrengo gure jatorrizko zerrenda izango da, eta, ondoren, gure zerrenda eguneratzeko seinalatu new_list dugu. Orain gauza dio modu nolabaiteko behar dugu, dugu osoan ezkerreko Azpizuhaitza zeharkatu bezala. Orain stuff tira atera behar dugu, orain bezalakoa da, null, ez dugu nahi return false. Tira kanpo nahi dugu, gure zerrendan. Hau egiteko modu eroso A - ondo, egia esan, ez dago hau egiteko modu bat baino gehiago. Edonork iradokizun bat? Non hau edo hori nola egin behar dut egin behar dut? Besterik ez dugu minutu pare bat, baina edozein iradokizun? Ordez modu bat ordez, gure egoera izanik, zer ari gara begira ez da null ordez joan gure zerrendan bera null arte jarraituko dugu. Beraz, gure zerrendan eta ondorioz sortu null izatea, ondoren exekutatu ditugu gauzak begiratu, bilatu. Baina horrek esan nahi du gure zerrendan lehen gauza besterik ez da lehen nodoaren izango. Oso lehenengo gauza izango da - Behar ez dugu ikusten. Beraz, zerrenda-> n gure zuhaitz izango da. list-> hurrengo null izango da. Eta orain zerrenda ez, berriz, berdintasuna null. Orain zerbait zabaltzen da gure zerrenda. Beraz, orain da berdina list-> n. Eta gero, zerrenda berdina list-> n, edo zerrenda-> hurrengo. Beraz, orain bada balioa berdin balio. Orain bai gure eskubidea eta gure ezkerretara erakuslea erakusleak gehitu ahal izango dugu. betiere Oraindik ez dute null. Hortik behera, uste dut egin behar dugu lehenik eta behin. (Orain> eskubidea! = NULL) bada gero nodo gure zerrenda horretan sartu gara. (Orain-> ezker) bada, hau da aparteko lana pixka bat da, baina fina da. (Orain-> ezker! = NULL) bada, eta ezker lotuta sartu gure zerrendan sartu dugu, eta hori izan beharko luke. Batetik bestera joateko dugu, betiere, zerbait izan dugun bezala gure zerrendan, nodoa beste begiratzen dugu. Beraz, itxura nodo hartan, gure zerrendan hurrengo bat aurrera egin dugu. Nodo hori bilatzen ari gara balioa bada, itzultzeko egia esan daiteke. Bestela, bai ezkerreko eta eskuineko subtrees sartu, betiere Oraindik ez dute null, gure zerrendan sartu beraz, haien gainean ezinbestean gara. Beraz, bada ez ziren null, gure root erakuslea bi gauza adierazi bada, ondoren, lehen zerbait bota dugu gure zerrenda eta ondorioz, beraz null izatea. Eta gero, bi gauza jarri dugu berriro, beraz, gaur egun, gure zerrendan tamaina 2. Ondoren, loop ari gara itzuli arte, eta besterik ez gabiltza zabaltzen joan da, demagun, gure root nodoaren erakuslea ezker. Eta hori dugu, besterik gabe mantendu gertatzen ari den; amaituko dugu dena baino gehiago begizta batean. Iragarki hori izan da, nabarmen zailagoa recursive konponbidea. Eta behin baino gehiagotan esan dut recursive konponbidea izan ohi du komun askoz etorriko konponbidea. Hemen hori da recursive konponbidea zehatz-mehatz zer egiten ari da. Aldaketa bakarra inplizituki pila erabiliz ordez, programa pila, jarraipena zer nodo bisitatu behar duzu zure modu gisa, lotutako zerrenda bat esplizituki erabili behar duzu. Bi kasuetan, pista ari zaren mantenduz zer nodo oraindik behar bisitatu beharreko. Errekurtsiboaren kasuan errazagoa da pila bat delako inplementatu programa pila. Oharra lotuta zerrenda hau, pila bat da. Whatever pilaketan besterik ez dugu jarri da berehala zer off tira pila hurrengo bisitatzera goaz. Gara, baina edozein galdera? [Ikaslea, ulertezina] [Bowden] Bai. Beraz, bada, gure lotutako zerrenda dugu, korrontea guy hau seinalatu eta orain ari gara gure lotutako zerrenda aurrera lasaia honetan zentratuko da. Ildo horretan zerrenda lotuta traversing baino gehiago ari gara. Eta gero, gure lotutako zerrenda eta stuff libre behar dugula uste dut behin egia edo gezurra itzuli baino lehen, behar dugu lotuta baino gehiago gure zerrendan batetik bestera joateko eta beti behera hemen, I guess, dugu orain eskuinera bada, ez da berdina, gehitu du, eta, beraz, orain libre nahi dugu orain delako, bai, ez zerrendari buruzko erabat dugu ahaztu? Bai. Beraz, hemen zer egin nahi dugu. Non dago erakuslea da? Cur zen ondoren struct zerrenda bat * 10 berdinen zerrenda hurrengoa nahi dugu. Free zerrenda, list = tenp. Eta kasu honetan, non egia itzuliko gara, behar ez dugu batetik bestera joateko gure zerrendan lotutako gauzak askatzeaz gainerako zehar. Errekurtsiboaren irtenbide buruz gauza polita da gauza askatzeaz besterik gabe esan nahi du pila izango duzu gertatuko off factorings leihoa. Beraz, zerbait uste hard-to-buruzko-kodea 3 lerro bezala dugu joan zerbait da, nabarmen askoz gehiago hard-to-uste-buruzko kode lerro. Edozein galdera bat baino gehiago? Guztiak eskubidea. Onak gara. Bye! [CS50.TV]