[Powered by Google Translate] [Artikolu 7] [Inqas Komdu]
[Nate Hardison] [Università ta 'Harvard]
[Dan huwa CS50.] [CS50.TV]
>> Merħba għas-Sezzjoni 7.
Grazzi għall uragan Ramlija,
minflok li jkollha sezzjoni normali din il-ġimgħa,
aħna qed tagħmel dan walk-through, permezz tat-taqsima tal-mistoqsijiet.
Jien ser jiġu wara flimkien mal-Problema Set 6 Ispeċifikazzjoni,
u li jmorru kollha permezz tal-mistoqsijiet fl-
A sezzjoni ta 'Mistoqsijiet sezzjoni.
Jekk ikun hemm xi mistoqsijiet,
jekk jogħġbok post dawn fuq CS50 Iddiskuti.
>> Alright. Ejja tibda.
Dritt issa jien tħares lejn paġna 3 tal-Ispeċifikazzjoni Set Problema.
Aħna ser ewwel tibda jitkellem dwar siġar binarju
peress li dawn għandhom ħafna ta 'rilevanza għal sett problema din il-ġimgħa -
il-kodifikazzjoni Tree Huffman.
Wieħed mill-istrutturi tad-data ħafna ewwel tkellimna dwar fuq CS50 kien il-firxa.
Ftakar li l-firxa hija sekwenza ta 'elementi -
kollha ta 'l-istess tip - maħżuna dritt li jmiss ma' xulxin fil-memorja.
Jekk I jkollhom firxa integer li nista 'jiġbed jużaw dan l-istil kaxxi-numri interi--
Ejja ngħidu għandi 5 fil-kaxxa 1, għandi 7 fit-tieni,
imbagħad għandi 8, 10, u 20 fil-kaxxa finali.
Affarijiet Ftakar, it-tnejn verament tajba dwar dan array
huma li aħna għandna dan l-aċċess kontinwu ta 'żmien li kull element partikolari
fil-firxa jekk nafu indiċi tagħha.
Per eżempju, jekk irrid grab-tielet element fil-firxa -
fil-indiċi 2 jużaw sistema tagħna indiċjar zero bbażati fuq -
I litteralment biss għandek tagħmel kalkolu matematiku sempliċi,
tal-ħops li din il-pożizzjoni fil-firxa,
iġbed il-8 li hija maħżuna hemmhekk,
u jien tajba biex tmur.
>> Waħda mill-affarijiet ħżiena dwar dan array - li tkellimna dwar
meta aħna diskussi listi marbuta -
hija li jekk jien tixtieq li daħħal element fis dan array,
Jien ser ikollhom jagħmlu xi ċaqliq madwar.
Per eżempju, dan array dritt hawn
hija fl-ordni magħżula - magħżula f'ordni axxendenti -
5, imbagħad 7, allura 8, allura 10, u mbagħad 20 -
imma jekk jien tixtieq li daħħal in-numru 9 fi dan il-firxa,
Jien ser ikollhom li ċċaqlaq xi wħud mill-elementi sabiex tagħmel spazju.
Nistgħu nużaw dan hawn.
Jien ser ikollhom biex iċċaqlaq il-5, is-7, u allura l-8;
toħloq lakuna fejn I tista 'tpoġġi l-9,
u allura l-10 u l-20 tista 'tmur għad-dritt ta' l-9.
Dan huwa tip ta 'uġigħ minħabba fil-agħar xenarju -
meta qed ikollna li daħħal kemm fil-bidu jew fl-aħħar
ta 'l-array, jiddependi fuq kif aħna qed tiċċaqlaq -
nistgħu jispiċċaw wara li ċċaqlaq l-elementi kollha
li aħna qed attwalment ħażna fil-firxa.
>> Allura, dak li kien il-mod madwar dan?
Il-mod madwar dan kien li tmur linked-lista tagħna Metodu meta -
minflok ħażna tal-elementi 5, 7, 8, 10, u 20 kull ħdejn xulxin fil-memorja -
dak li aħna minflok ma ġie jaħżinhom tip ta 'fejn ridna li jaħżinhom
f'dawn lymph lista linked-liema jien tpinġija hawn, it-tip ta 'ad hoc.
U allura aħna konnessi flimkien jużaw dawn pointers jmiss.
I jista 'jkollhom pointer minn 5 sa l-7,
pointer mill-7 sa l-8,
pointer mill-8 sa l-10,
u finalment, pointer mill-10 sa l-20,
u mbagħad pointer null fil-20 jindikaw li hemm xejn xellug.
Il-kompromess li għandna hawn
hija li issa jekk irridu li daħħal in-numru 9 fil-lista magħżula tagħna,
kollha għandna tagħmel hu li toħloq node ġdid ma 9,
wajer it up għall-punt li l-post xieraq,
u mbagħad mill-ġdid tal-wajer l-8-punt sa l-9.
Li pretty fast, jekk wieħed jassumi nafu eżattament fejn irridu li daħħal il-9.
Iżda l-kompromess bi skambju għal dan hija li aħna stajt issa tilfu l-aċċess kontinwu ta 'żmien
għal kull element partikolari fl-istruttura tad-data tagħna.
Per eżempju, jekk irrid li ssib l-element 4 f'din il-lista konness,
Jien ser ikollhom jibdew fil-bidu nett tal-lista
u x-xogħol tiegħi mod permezz għadd node-by-node sal I isibu l-waħda raba '.
>> Sabiex tikseb aċċess aħjar prestazzjoni minn lista marbuta -
iżda wkoll iżommu xi wħud mill-benefiċċji li kellna
f'termini ta 'dħul-time minn lista marbuta -
siġra binarju huwa ser ikollok bżonn tuża memorja ftit aktar.
B'mod partikolari, minflok sempliċiment li wieħed pointer fi node siġra binarju -
ma node bħall-lista marbuta--
aħna qed tmur biex iżżid pointer 2 għall-node siġra binarju.
Pjuttost milli sempliċiment wara li wieħed pointer għall-element li jmiss,
aħna qed tmur biex ikollhom pointer għal tfal xellug u tifel dritt.
>> Ejja tfassal stampa biex tara dak li attwalment tidher qiesha.
Għal darb'oħra, jien ser jużaw dawn il-kaxxi u l-vleġeġ.
A node siġra binarju se tibda off ma biss kaxxa sempliċi.
Huwa ser jkollhom spazju għall-valur,
u allura huwa wkoll se jkollhom spazju għall-tarbija xellug u l-minuri dritt.
Jien ser tikketta hawnhekk.
Aħna ser ikollhom it-tfal tax-xellug, u allura aħna qed tmur biex ikollhom it-tfal dritt.
Hemm ħafna modi differenti ta 'kif isir dan.
Kultant għall-ispazju u l-konvenjenza,
I ser attwalment tiġbed simili li qed nagħmel hawn fuq il-qiegħ
fejn jien ser ikollhom l-valur fil-quċċata,
u allura l-wild dritt fuq il-qiegħ dritt,
u l-wild xellug fuq il-qiegħ tax-xellug.
Li jmorru lura għal dan dijagramma ta 'fuq,
aħna għandna l-valur fuq nett,
allura aħna għandna l-pointer fuq ix-tfal, u allura għandna l-pointer dritt tat-tfal.
>> Fil-Ispeċifikazzjoni Set Problema,
nitkellmu dwar tfassil node li għandu valur 7,
u mbagħad pointer fuq ix-xellug tat-tfal li huwa null, u pointer dritt tat-tfal li huwa null.
Nistgħu jew ikteb NULL kapital fl-ispazju għall-
kemm il-wild xellug u l-minuri dritt, jew nistgħu jiġbed dan mmejla dijagonali
permezz ta 'kull tal-kaxxi li tindika li huwa null.
Jien ser jagħmlu dan biss għaliex dan huwa sempliċi.
Dak li tara hawnhekk huma żewġ modi ta 'diagramming sempliċi ħafna node siġra binarju
fejn għandna l-valur 7 u pointers tfal nulla.
>> It-tieni parti ta 'taħdidiet speċifikazzjoni tagħna dwar kif ma' listi marbuta -
ftakar, aħna biss kellhom jżommu lill-element ewwel fil-lista
li tiftakar il-lista sħiħa -
u l-istess, ma 'siġra binarju, aħna biss biex iżomm il-1 pointer għall-siġra
sabiex jinżamm kontroll fuq l-istruttura tad-data kollha.
Dan l-element speċjali tas-siġra huwa msejjaħ il-node għerq tal-siġra.
Per eżempju, jekk dan node wieħed - dan node fih il-valur 7
ma pointers nulla xellug-u dritt tat-tfal -
kienu l-valur biss siġar tagħna,
allura dan ikun node għerq tagħna.
Hu l-bidu nett ta 'siġar tagħna.
Nistgħu naraw dan ftit aktar ċar darba nibdew żżid għoqiedi aktar siġar tagħna.
Let me pull up paġna ġdida.
>> Issa aħna qed tmur biex tiġbed siġra li għandha 7 fil-għerq,
u 3 ta 'ġewwa tal-wild xellug, u 9 ta' ġewwa tal-wild dritt.
Għal darb'oħra, dan huwa pjuttost sempliċi.
Imxejna ltqajna 7, jiġbed node għall-3, node għal 9,
u jien ser jistabbilixxu l-pointer fuq ix-xellug tifel ta '7 għall-punt li l-node fih 3,
u l-pointer dritt tat-tfal ta 'l-node fih 7 għall-node fih 9.
Issa, peress 3 u 9 ma jkollhom ebda tfal,
aħna qed tmur biex jistabbilixxu kollha ta 'pointers tfal tagħhom li jkunu null.
Hawnhekk, l-għerq tal-siġra tagħna tikkorrispondi mal-node fih in-numru 7.
Tista 'tara li jekk kollha għandna huwa pointer għal dak node għerq,
nistgħu mbagħad jimxu permezz tas-siġar tagħna u l-aċċess lymph tfal iż -
kemm 3 u 9.
Ebda ħtieġa li tinżamm pointers għal kull node wieħed fuq is-siġra.
Alright. Issa aħna qed tmur biex żid ieħor node għal din dijagramma.
Aħna ser iżid node fih 6,
u aħna qed tmur biex iżżid dan bħala l-wild dritt ta 'l-node fih 3.
Biex tagħmel dan, jien ser iħassar dik pointer null fil-3-node
u wajer it up għall-punt li l-node fih 6. Alright.
>> Fuq dan il-punt, ejja jmorru fuq ftit ta 'terminoloġija.
Biex tibda, ir-raġuni li din tissejjaħ siġra binarju, b'mod partikolari
huwa li għandha pointers tfal 2.
Hemm tipi oħra ta 'siġar li għandhom pointers tfal aktar.
B'mod partikolari, inti għamilt "jippruvaw" fil Set Problem 5.
Int ser ikollok avviż li f'dak jipprova, kellek 27 pointers differenti għal tfal differenti -
wieħed għal kull waħda mill-ittri 26 fil-alfabett Ingliż,
u allura l-27 għall-apostrophe -
hekk, li huwa simili għal tip ta 'siġra.
Iżda hawnhekk, peress binarja huwa, aħna biss pointers tfal 2.
>> Barra minn dan node għerq li tkellimna dwar,
konna wkoll ġew jitfg madwar dan it-terminu "tfal."
Xi jfisser għal wieħed node li huma tfal ta 'ieħor node?
Huwa letteralment ifisser li node wild huwa tifel ta 'ieħor node
jekk dik il-node ieħor għandha waħda mill pointers tfal tagħha stabbiliti għall-punt li dak node.
Biex dan f'termini iktar konkreti,
jekk 3 huwa indikat minn wieħed mill-pointers tfal ta '7, allura 3 huwa tifel ta' 7.
Jekk konna li ċifra barra dak it-tfal ta '7 huma -
ukoll, naraw li 7 għandu pointer sa 3 u pointer sa 9,
hekk 9 u 3 huma t-tfal ta 7.
Disa m'għandha l-ebda tfal minħabba pointers tfal tagħha huma nulli,
u 3 għandu biss wild wieħed, 6.
Sitta wkoll għandha l-ebda tfal minħabba tnejn pointers tagħha huma nulli, li aħna ser tiġbed dritt issa.
>> Barra minn hekk, aħna wkoll jitkellmu dwar il-ġenituri ta 'node partikolari,
u dan huwa, kif youd jistennew, il-maqlub ta 'din id-deskrizzjoni tat-tfal.
Kull node għandha ġenitur wieħed biss - minflok tnejn kif inti tista 'tistenna mal-bnedmin.
Per eżempju, il-ġenitur tat-3 huwa 7.
Il-ġenitur tad-9 huwa wkoll 7, u l-ġenitur ta '6 huwa 3. Mhux ħafna għaliha.
Għandna wkoll it-termini biex jitkellmu dwar nanniet u neputijiet,
u b'mod aktar ġenerali nitkellmu dwar l-antenati
u d-dixxendenti ta 'node partikolari.
Il-antenat ta 'nodu - jew antenati, pjuttost, ta' nodu -
huma kollha ta 'l-għoqiedi li jinsabu fit-triq mill-għeruq għal dak node.
Per eżempju, jekk jien tħares lejn l-6 node,
allura l-antenati ser ikunu kemm 3 u 7.
L-antenati ta 9, per eżempju, huma - jekk jien tħares lejn l-9 node -
allura l-antenat tad-9 huwa biss 7.
U d-dixxendenti huma eżattament il-maqlub.
Jekk irrid li tħares lejn kollha ta 'l-dixxendenti ta' 7,
imbagħad I għandek tfittex fil-livelli kollha tal-lymph taħt dan.
So, I jkollhom 3, 9, u 6 kollha bħala dixxendenti ta '7.
>> It-terminu finali li aħna ser nitkellmu dwar huwa dan il-kunċett li tkun parentela.
Aħwa - tip ta 'wara flimkien fuq dawn it-termini tal-familja -
huma lymph li huma fl-istess livell fil-siġra.
Allura, 3 u 9 huma aħwa minħabba li huma fl-istess livell fil-siġra.
Huma t-tnejn għandhom l-istess ġenitur, 7.
Il 6 m'għandha l-ebda aħwa għax 9 ma jkollhom l-ebda tfal.
U 7 ma jkollu ebda aħwa, għaliex dan huwa l-għerq ta 'siġra tagħna,
u hemm biss qatt 1 għerq.
Għal 7 li jkollhom aħwa hemm irid ikun node fuq 7.
Ikun hemm għandek tkun ġenitur ta '7, f'liema każ 7 ma jibqax l-għerq tal-siġra.
Imbagħad dak il-ġenitur l-ġdida tas-7 jkollha wkoll li jkollhom tfal,
u dak it-tifel mbagħad tkun l-aħwa ta '7.
>> Alright. Nimxu fuq.
Meta bdejna diskussjoni tagħna ta 'siġar binarju,
tkellimna dwar kif konna se jużawhom biex
jiksbu vantaġġ fuq kemm arrays u listi marbuta.
U l-mod kif aħna qed tmur biex tagħmel dan huwa ma 'din il-proprjetà li tordna.
Aħna ngħidu li siġra binarju ikun ordnat, skond l-ispeċifikazzjoni,
jekk għal kull node fil siġra tagħna, kollha tal-dixxendenti tiegħu fuq ix-xellug -
il-minuri xellug u kollha ta 'dixxendenti tat-tfal tax-xellug tal -
għandhom valuri inqas, u kollha ta 'l-għoqiedi fuq id-dritt -
il-wild dritt u kollha ta 'dixxendenti tat-tfal dritt ta -
jkollhom lymph akbar mill-valur tal-node attwali li aħna qed tfittex fuq.
Just għas-sempliċità, aħna qed tmur biex wieħed jassumi li ma jkunx hemm xi punti ta 'konġunzjoni duplikat fil-siġra tagħna.
Per eżempju, f'dan il-siġra aħna ma tkunx qed tmur biex tittratta l-każ
fejn għandna l-valur 7 fil-għerq
u allura għandna wkoll il-valur 7 x'imkien ieħor fil-siġra.
F'dan il-każ, inti ser ikollok avviż li din is-siġra huwa tabilħaqq ordnat.
Għandna l-valur 7 fil-għerq.
Kollox fuq ix-xellug ta '7 -
jekk I jneħħu kollha ta 'dawn il-marki ftit hawn -
kollox ix-xellug ta '7 - il-3 u 6 -
dawk il-valuri huma t-tnejn inqas minn 7, u kollox għad-dritt - li huwa biss dan 9 -
huwa aktar minn 7.
>> Din mhix l-siġra biss ordnat li fihom dawn il-valuri,
imma ejja jiġbed aktar ftit minnhom.
Hemm fil-fatt mazz sħiħ ta 'modi li nistgħu nagħmlu dan.
Jien ser tuża shorthand biss li żżomm affarijiet sempliċi meta -
aktar milli jfasslu l-sħiħ kaxxi-u-vleġeġ -
Jien biss ser tiġbed in-numri u żid vleġeġ li jgħaqqduhom.
Biex tibda, aħna ser biss jiktbu siġra oriġinali tagħna għal darb'oħra meta kellna 7, u mbagħad 3,
u mbagħad 3 enfasizzat lura għad-dritt li l-6,
u 7 kellhom tifel dritt li kien 9.
Alright. X'hemm mod ieħor li nistgħu tikteb din is-siġra?
Minflok ma jkollhom 3 jkun l-wild xellug ta '7,
nistgħu wkoll il-6 ikunu l-wild xellug ta '7,
u mbagħad 3 tkun l-wild xellug tal-6.
Dan look like din is-siġra dritt hawn fejn stajt ltqajna 7,
imbagħad 6, imbagħad 3, u 9 fuq il-lemin.
Aħna wkoll ma għandhomx għalfejn ikollhom 7 bħala node għerq tagħna.
Nistgħu wkoll 6 kif node għerq tagħna.
X'għandu li look like?
Jekk aħna qed tmur biex iżommu din il-proprjetà ordnat,
kollox għall-xellug tal-6 għandu jkun inqas minn dan.
Hemm wieħed biss possibbiltà, u li 3.
Iżda mbagħad bħala l-wild dritt ta '6, għandna żewġ possibbiltajiet.
L-ewwel, jista 'jkollna l-7 u allura l-9,
jew nistgħu tiġbed - bħal jien waslu biex jagħmlu hawnhekk -
fejn għandna l-9 bħala l-wild dritt tal-6,
u allura l-7 bħala l-wild xellug tal-9.
>> Issa, 7 u 6 mhumiex l-valuri biss possibbli għall-għerq.
Nistgħu wkoll 3 tkun l-għerq.
X'jiġri jekk 3 hija l-għerq?
Hawnhekk, l-affarijiet jiksbu ftit interessanti.
Tliet ma jkollhom xi valuri li huma inqas minn dan,
sabiex naħa tax-xellug kollu tas-siġra huwa biss se tkun nulla.
Hemm mhux ser ikun xejn hemm.
Għad-dritt, nistgħu lista affarijiet f'ordni axxendenti.
Aħna jista 'jkollhom 3, imbagħad 6, imbagħad 7, imbagħad 9.
Or, nistgħu nagħmlu 3, imbagħad 6, allura 9, allura 7.
Or, nistgħu nagħmlu 3, imbagħad 7, imbagħad 6, imbagħad 9.
Or, 3, 7 - fil-fatt l-ebda, aħna ma tistax tagħmel a 7 aktar.
Dik hija ħaġa waħda tagħna hemmhekk.
Nistgħu nagħmlu 9, u mbagħad mill-9 nistgħu nagħmlu 6 u mbagħad 7.
Or, nistgħu nagħmlu 3, allura 9, allura 7, u mbagħad 6.
>> Ħaġa waħda li tiġbed l-attenzjoni tiegħek għal hawnhekk huwa
li dawn is-siġar huma ftit stramb li tħares.
B'mod partikolari, jekk inħarsu lejn il-siġar 4 fuq il-lemin -
I ser ċirku minnhom, hawn -
dawn is-siġar tfittex kważi eżattament bħall-lista marbuta.
Kull node għandha biss wild wieħed,
u għalhekk aħna ma jkollhomx xi parti minn dan struttura ta 'siġra simili li naraw, per eżempju,
f'dan siġra 1 isolati hawn fuq fuq il-qiegħ tax-xellug.
Dawn is-siġar huma attwalment imsejħa jiddeġenera siġar binarju,
u aħna ser jitkellmu dwar dawn aktar fil-futur -
speċjalment jekk inti tmur fuq biex jieħdu korsijiet oħra tax-xjenza tal-kompjuter.
Dawn is-siġar huma jiddeġenera.
Huma qed mhux utli ħafna għaliex, fil-fatt, din l-istruttura jippresta ruħu
biex lookup f'ħinijiet simili għal dik ta 'lista marbuta.
Aħna ma jiksbu biex jieħdu vantaġġ mill-memorja extra - dan pointer extra -
minħabba l-istruttura tagħna jkunu ħżiena b'dan il-mod.
Pjuttost milli jmorru fuq u tfassal l-siġar binarju li jkollhom 9 fil-għerq,
li huwa l-każ finali li rridu naraw,
aħna qed minflok, f'dan il-punt, ser jitkellmu ftit dwar dan it-terminu ieħor
li nużaw meta wieħed jitkellem dwar siġar, li tissejjaħ l-għoli.
>> L-għoli ta 'siġra hija d-distanza mill-għeruq lill-node l-aktar imbiegħda,
jew pjuttost in-numru ta 'ħops li inti jkollha tagħmel sabiex
tibda mill-għeruq u mbagħad jispiċċaw fil-node-aktar imbiegħda fil-siġra.
Jekk nagħtu ħarsa lejn xi wħud minn dawn is-siġar li konna mfassla dritt hawn,
nistgħu naraw li jekk nieħdu din is-siġra fil-rokna tax-xellug ta 'fuq u aħna tibda fil-3,
allura għandna biex jagħmlu 1 hop biex jiksbu l-6, tal-ħops 2 biex jiksbu l-7,
u ħops 3 biex jiksbu l-9.
Għalhekk, l-għoli ta 'din is-siġra huwa 3.
Nistgħu nagħmlu l-istess eżerċizzju, għas-siġar l-oħra msemmija ma 'dan aħdar,
u naraw li l-għoli ta 'kollha ta' dawn is-siġar huwa wkoll tassew 3.
Dan huwa parti minn dak li jagħmel lilhom jiddeġenera -
li tul tagħhom huwa biss wieħed inqas min-numru ta 'nodes fil-siġra kollu.
Jekk inħarsu lejn din is-siġra oħra li l mdawra bl-aħmar, min-naħa l-oħra,
naraw li n-nodi tal-weraq aktar imbiegħda huma l-6 u 9 -
il-weraq huma dawk lymph li m'għandhomx tfal.
Għalhekk, sabiex tikseb mill-node għerq jew lill-6 jew l-9,
aħna għandna biex jagħmlu waħda ħops li jasal sal-7 u mbagħad ħops 2 biex jiksbu l-9,
u l-istess, biss ħops tieni mill-7 biex jiksbu l-6.
Għalhekk, l-għoli ta 'din is-siġra hawn fuq huwa biss 2.
Inti tista 'tmur lura u tagħmel dan għall kollha tal-siġar oħra li aħna diskuss qabel
li jibda bil-7 u l-6,
u inti ser issib li l-għoli ta 'dawn l-siġar huwa wkoll 2.
>> Ir-raġuni aħna kont qed jitkellem dwar ordnati siġar binarju
u għaliex dawn qed jibred minħabba li inti tista 'tfittex permezz tagħhom fl-
b'mod simili ħafna għall-tiftix fuq firxa magħżula.
Dan huwa fejn nitkellmu dwar jkollna dak iż-żmien lookup mtejba
fuq il-lista sempliċi marbuta.
Ma 'lista marbut - jekk inti tixtieq li ssib l-element partikolari -
int fl-aħjar se jagħmlu xi tip ta 'tfittxija lineari
fejn tibda fil-bidu ta 'lista u ħops wieħed mill-wieħed -
1 node minn wieħed node -
permezz tal-lista sħiħa sakemm issib xi tkun qed tfittex.
Billi, jekk għandek siġra binarju li l-maħżuna f'dan il-format sbieħ,
inti tista 'attwalment tikseb aktar ta' tfittxija binarja għaddejjin
fejn inti taqsam u conquer
u tfittxija permezz-nofs xieraq tas-siġra f'kull pass.
Ejja naraw kif din taħdem.
>> Jekk għandna - għal darb'oħra, li tmur lura għall-siġra oriġinali tagħna -
nibdew fi 7, għandna 3 fuq ix-xellug 9 fuq il-lemin,
u taħt l-3 għandna l-6.
Jekk irridu li tfittex għan-numru 6 fil din is-siġra, aħna'd tibda fil-għerq.
Aħna ser jipparaguna l-valur aħna qed tfittex għal, ngħidu 6,
għall-valur maħżuna fil-node li aħna qed attwalment tħares lejn, 7,
issib li 6 huwa tabilħaqq inqas minn 7, hekk aħna d jimxu lejn ix-xellug.
Jekk il-valur tas-6 kien ikbar minn 7, rridu naraw minflok jiċċaqalqu lejn il-lemin.
Peress li nafu li - minħabba l-istruttura tas-siġra tagħna binarju ordnat -
kollha tal-valuri ta 'inqas minn 7 huma ser jiġi maħżun ix-xellug ta' 7,
hemm ebda bżonn li jolqot anki tfittex permezz il-lemin tal-siġra.
Ladarba nimxu lejn ix-xellug u aħna qed issa fil-node fih 3,
nistgħu nagħmlu dan il-paragun istess mill-ġdid fejn aħna jqabblu l-3 u l-6.
U insibu li filwaqt li 6 - il-valur aħna qed tfittex - huwa akbar minn 3,
nistgħu mmorru għall-lemin tal-node fih 3.
M'hemm l-ebda naħa tax-xellug hawn, hekk aħna setgħet injorat dan.
Iżda aħna biss nafu li għaliex aħna qed tħares lejn il-siġra nnifisha,
u nistgħu naraw li s-siġra għandha l-ebda tfal.
>> Huwa wkoll pjuttost faċli li wieħed ifittex 6 fil din is-siġra jekk aħna qed tagħmel dan lilna nfusna bħala bnedmin,
imma ejja ssegwi dan il-proċess mekkaniku bħal kompjuter li ser jagħmlu
biex verament jifhmu l-algoritmu.
Fuq dan il-punt, aħna qed issa tħares lejn node li fih 6,
u aħna qed ifittxu għall-valur 6,
hekk, fil-fatt, aħna ħadthom sabet il-node xierqa.
Sibna l-valur 6 fil siġra tagħna, u aħna tista 'twaqqaf tfittxija tagħna.
Fuq dan il-punt, jiddependi fuq x'inhu għaddej,
nistgħu ngħidu, iva, sibna l-valur 6, teżisti fil-siġra tagħna.
Jew, jekk aħna qed tippjana biex jiddaħħal node jew tagħmel xi ħaġa, nistgħu nagħmlu dan f'dan il-punt.
>> Ejja nagħmlu lookups koppja aktar biss biex tara kif taħdem din.
Ejja nħarsu lejn dak li jiġri jekk konna biex jippruvaw u tfittex l-valur 10.
Jekk konna li wieħed ifittex l-valur 10, aħna se tibda fl-għeruq.
Aħna tixtieq tara li 10 huwa aktar minn 7, hekk aħna d jimxu lejn il-lemin.
Aħna tixtieq tikseb l-9 u jqabblu 9 sa l-10 u tara li 9 huwa tabilħaqq inqas minn 10.
Għalhekk għal darb'oħra, aħna'd jippruvaw jimxu lejn il-lemin.
Iżda f'dan il-punt, aħna'd avviż li aħna qed fuq node null.
M'hemm xejn hemmhekk. M'hemm xejn meta l-10 għandu jkun.
Dan huwa fejn nistgħu rapport falliment - li hemm tabilħaqq nru 10 fil-siġra.
U fl-aħħarnett, ejja jgħaddu mill-każ fejn aħna qed jippruvaw biex wieħed ifittex 1 fil-siġra.
Dan huwa simili għal dak li jiġri jekk aħna tfittex up 10, ħlief minflok tmur lejn il-lemin,
aħna qed tmur biex tmur ix-xellug.
Nibdew fil-7 u tara li 1 huwa inqas minn 7, hekk nimxu lejn ix-xellug.
Nikbru lill-magna 3 u tara li l-1 huwa inqas minn 3, sabiex għal darb'oħra aħna jippruvaw jimxu lejn ix-xellug.
Fuq dan il-punt għandna node null, sabiex għal darb'oħra nistgħu rapport falliment.
>> Jekk inti tixtieq titgħallem aktar dwar siġar binarju,
hemm mazz sħiħ ta 'problemi ftit gost li inti tista' tagħmel magħhom.
Nissuġġerixxi prattikanti it-tfassil minn dawn dijagrammi wieħed mill-wieħed
u wara kollha permezz tal-passi differenti,
għaliex dan se jidħlu fil handy super-
mhux biss meta int tagħmel is-sett Huffman problema kodifikazzjoni
iżda wkoll fil-korsijiet tal-ġejjieni -
biss tagħlim kif tfassal out dawn l-istrutturi tad-data u think permezz tal-problemi
mal-pinna u l-karta jew, f'dan il-każ, iPad u istilus.
>> Fuq dan il-punt għalkemm, aħna qed tmur biex jimxu fuq jagħmlu xi prattika kodifikazzjoni
u fil-fatt jilagħbu ma 'dawn is-siġar binarju u ara.
Jien ser jaqilbu lura fuq il-kompjuter tiegħi.
Għal din il-parti tat-taqsima, minflok li jużaw CS50 Run jew CS50 Spazji,
Jien ser tuża l-appliance.
>> Wara flimkien mal-ispeċifikazzjoni Set Problema,
Nara li jien suppost li jiftħu l-appliance,
mur folder Dropbox tiegħi, toħloq folder imsejjaħ Sezzjoni 7,
u mbagħad toħloq fajl imsejjaħ binary_tree.c.
Here we go. Stajt ltqajna l-appliance diġà miftuħa.
Jien ser pull up terminal.
Jien ser tmur fil-folder Dropbox, jagħmel direttorju imsejjaħ section7,
u tara huwa totalment vojta.
Issa jien ser jiftħu binary_tree.c.
Alright. Here we go - fajl vojt.
>> Ejja ħa mmorru lura għall-ispeċifikazzjoni.
L-ispeċifikazzjoni jitlob li tinħoloq definizzjoni tip ġdid
għal node siġra binarju jkun fih valuri int -
bħad-valuri li aħna ġibdet fl diagramming tagħna qabel.
Aħna ser jużaw dan boilerplate typedef li aħna ghamilt dritt hawn
li inti għandek jirrikonoxxu mid Set Problema 5 -
jekk inti ma l-mod tabella hash tal conquering-programm speller.
Għandek ukoll jirrikonoxxu mit-taqsima ġimgħa li għaddiet
fejn tkellimna dwar listi marbuta.
Imxejna ltqajna dan typedef ta node Struct,
u konna mogħtija din node Struct dan l-isem tad node Struct minn qabel
sabiex inkunu nistgħu mbagħad tirreferi għaliha peress li aħna inneħħu jridu li jkollhom pointers node Struct
bħala parti mill-Struct tagħna, iżda aħna ve mbagħad mdawwar dan -
jew pjuttost, magħluqa dan - fil-typedef
sabiex, aktar tard fil-kodiċi, nistgħu jirreferu għal din Struct biss bħala node minflok node Struct.
>> Din se tkun simili ħafna għad-definizzjoni lista waħedhom-linked li rajna ġimgħa li għaddiet.
Biex tagħmel dan, ejja biss tibda billi tikteb l-boilerplate.
Aħna nafu li għandna li jkollhom valur sħiħ,
hekk aħna ser jitqiegħdu fil-valur int, u mbagħad minflok li waħda biss pointer għall-element li jmiss -
kif għamilna ma weħidhom marbuta listi -
aħna qed tmur biex ikollhom pointers tfal xellug u lemin.
Li pjuttost sempliċi wisq - Struct node wild * xellug;
u Struct node * wild dritt;. Kessaħ.
Li qisu bidu pjuttost tajba.
Ejja ħa mmorru lura għall-ispeċifikazzjoni.
>> Issa għandna bżonn li tiddikjara varjabbli globali * node għall-għerq ta 'siġra.
Aħna ser tagħmel dan globali bħad għamilna pointer ewwel fil-lista marbuta tagħna wkoll globali.
Dan kien tant li fil-funzjonijiet li aħna jiktbu
aħna ma għandhomx iżommu jgħaddi madwar dan għerq -
għalkemm aħna ser tara li jekk inti trid tikteb dawn il-funzjonijiet recursively,
jista 'jkun aħjar li ma anki jgħaddu madwar bħala globali fl-ewwel post
u minflok initialize din lokalment fil-funzjoni prinċipali tiegħek.
Iżda, aħna ser tagħmel dan globalment biex tibda.
Għal darb'oħra, aħna ser jagħtuk ftit spazji, u jien ser tiddikjara għerq * node.
Just biex tiżgura li jien ma jħallu din uninitialized, jien ser tistabbilixxi li ugwali għal null.
Issa, fil-funzjoni ewlenija - li aħna ser jiktbu verament malajr dritt hawn -
int prinċipali (int argc, const char * ARGV []) -
u jien ser tibda tiddikjara firxa ARGV tiegħi bħala const biss hekk li naf
li dawn l-argumenti huma argumenti li jien probabbilment ma jridux li timmodifika.
Jekk irrid li timmodifika minnhom I għandhom probabbilment tkun qed tagħmel kopji tagħhom.
Int ser ikollok tara dan ħafna fil-kodiċi.
Huwa tal-multa jew mod. Huwa multa li jitilqu minnu bħala - ħalli barra l-const jekk inti tixtieq.
I tipikament poġġih fil biss hekk li I ifakkru lili nnifsi
li jien probabbilment ma jridux li timmodifika dawn l-argumenti.
>> Bħal dejjem, jien ser tinkludi dan il-prospett 0 linja fl-aħħar tal prinċipali.
Hawnhekk, I se initialize node għerq tiegħi.
Kif inhi dritt issa, stajt ltqajna pointer li l-ssettjat għal null,
hekk huwa tipponta lejn xejn.
Sabiex effettivament jibda jinbena l-node,
I l-ewwel ħtieġa li jiġu allokati memorja għal dan.
Jien ser tagħmel dan billi tagħmel memorja fuq il-munzell użu malloc.
Jien ser jistabbilixxu għerq ugwali għar-riżultat tal malloc,
u jien ser tuża l-operatur sizeof biex tikkalkula l-daqs ta 'node.
Ir-raġuni li nuża node sizeof-kuntrarju, ngħidu aħna,
tagħmel xi ħaġa bħal din - malloc (4 + 4 +4) jew malloc 12 -
huwa għaliex nixtieq kodiċi tiegħi li tkun kompatibbli kemm jista 'jkun.
Irrid li tkun tista 'tieħu dan il-fajl c., Josservawha fuq l-appliance,
u mbagħad josservawha fuq 64-bit Mac tiegħi -
jew fuq arkitettura kompletament differenti -
u nixtieq dan kollu biex jaħdmu l-istess.
>> Jekk jien jagħmlu suppożizzjonijiet dwar id-daqs ta 'varjabbli -
id-daqs ta 'int jew id-daqs ta pointer -
allura jien ukoll jsiru suppożizzjonijiet dwar it-tipi ta arkitetturi
li fuqha kodiċi tiegħi tista b'suċċess jikkompilaw meta jitħaddmu.
Dejjem uża sizeof kif oppost għad manwalment jingħaddu l-oqsma Struct.
Ir-raġuni oħra hija li hemm tista 'wkoll tkun padding li l-kumpilatur tpoġġi fil-Struct.
Anke biss jingħaddu l-oqsma individwali mhux xi ħaġa li inti tipikament trid tagħmel,
hekk, iħassru dik il-linja.
Issa, biex verament initialize din node għerq,
Jien ser ikollhom biex plagg fil-valuri għal kull ta 'oqsma differenti tagħha.
Per eżempju, għal valur naf nixtieq li initialize sa 7,
u għal issa jien ser jistabbilixxu l-minuri xellug jkun null
u l-wild dritt li wkoll tkun nulla. Great!
Aħna ghamilt dik il-parti ta 'l-spec.
>> L-ispeċifikazzjoni stabbiliti fil-qiegħ tal-paġna 3 tistaqsi lili biex joħolqu tliet aktar glandoli -
wieħed li jkun fih 3, wieħed li jkun fih 6, u wieħed ma 9 -
u mbagħad wajer flimkien sabiex jidher eżattament bħall dijagramma siġra tagħna
li konna nitkellmu qabel.
Ejja nagħmlu dan pretty malajr hawn.
Int ser ikollok tara verament malajr li jien ser tibda bil-miktub mazz ta 'kodiċi duplikat.
Jien ser toħloq * node u jien ser sejħa hija tlieta.
Jien ser tistabbilixxi li ugwali għal malloc (sizeof (node)).
Jien ser jistabbilixxu tliet> valur = 3.
Tliet -> left_child = NULL; 3 -> lemin _child = NULL; kif ukoll.
Li jistenna pjuttost simili għall initializing-għerq, u dan huwa eżattament dak
Jien ser ikollhom jagħmlu jekk nibda initializing 6 u 9 kif ukoll.
I ser tagħmel li verament malajr hawnhekk - fil-fatt, jien ser tagħmel kopja u paste ftit,
u kun żgur li I - alright.
Issa, stajt ltqajna dan kkupjati u I tista 'tmur quddiem u jistabbilixxu dan ugwali għal 6.
Tista 'tara li dan jieħu awhile u mhux super-effiċjenti.
Fi ftit ftit, aħna ser jiktbu funzjoni li se jagħmel dan għalina.
Irrid li tissostitwixxi dan ma '9, jissostitwih bid a 6.
>> Issa konna ltqajna kollha ta 'punti ta' konġunzjoni tagħna maħluqa u initialized.
Imxejna ltqajna għeruq tagħna stabbilit ugwali għal 7, jew li jkun fihom il-valur 7,
node tagħna fihom 3, node tagħna fiha 6, u node tagħna fihom 9.
Fuq dan il-punt, kollha għandna nagħmlu huwa kollox wajer up.
Ir-raġuni I initialized l-pointers għal null huwa biss hekk li jien tagħmel ċert li
Jien m'għandi l-ebda indikazzjonijiet uninitialized fil hemm mill-inċident.
U wkoll peress li, f'dan il-punt, I biss għandek attwalment jgħaqqdu l-lymph lil xulxin -
għal dawk li dawn qed attwalment konnessi mal - I ma jkollhom jgħaddu u tagħmel
ċert li l-nulls huma hemmhekk fil-postijiet adattati.
>> Tibda fl-għerq, naf dak it-tifel xellug l-għerq huwa 3.
Naf dak it-tifel dritt l-għerq huwa 9.
Wara dan, it-tfal biss l-oħra li I ħallew għalfejn tinkwieta dwar
huwa tifel dritt 3, li hija 6.
Wara dan, dan kollu jidher pjuttost tajba.
Aħna ser tħassar xi wħud minn dawn il-linji.
Issa kollox jistenna pretty tajba.
Ejja ħa mmorru lura għall-ispeċifikazzjoni tagħna u ara dak li għandna biex jagħmlu li jmiss.
>> Fuq dan il-punt, għandna biex jiktbu funzjoni msejħa "fih"
ma 'prototip ta' ma fiha bool (int valur).
U dan jinkludi funzjoni se ritorn vera
jekk l-siġra indikat mill-varjabbli tagħna għeruq globali
fiha l-valur għadda fil-funzjoni u falza mod ieħor.
Ejja imorru quddiem u tagħmel dan.
Din se tkun eżattament bħall-lookup li għamilna bl-idejn fuq il-iPad biss ftit ilu.
Ejja zoom lura ftit u iscroll.
Aħna ser tpoġġi din il-funzjoni dritt fuq il-funzjoni prinċipali tagħna
hekk li aħna ma jkollhom jagħmlu xi tip ta 'prototipi.
Allura, bool fih (int valur).
Hemm immorru. Hemm dikjarazzjoni boilerplate tagħna.
Just biex tiżgura li dan se tikkompila,
Jien ser jimxi 'l quddiem u biss sett huwa ugwali għal ritorn foloz.
Dritt issa din il-funzjoni biss mhux se tagħmel xejn u dejjem jirrappurtaw li
il-valur li aħna qed tfittex ma tkunx fil-siġra.
>> Wara dan, huwa probabbilment idea tajba -
peress li aħna ħadthom miktub mazz sħiħ ta 'kodiċi u aħna lanqas biss ppruvaw ittestjar encore -
biex ikun żgurat li dan kollu jikkompila.
Hemm ftit affarijiet li rridu nagħmlu biex tiżgura li dan fil-fatt jiġbor.
L-ewwel, ara jekk aħna kont qed tuża xi funzjonijiet xi libreriji li għadna ma inklużi.
Il-funzjonijiet konna użati s'issa huma malloc,
u allura konna wkoll qegħdin jużaw dan it-tip - dan it-tip nonstandard imsejjaħ "bool' -
li hija inkluża fil-fajl tal-header standard bool.
We definitely tixtieq li jinkludu bool.h standard għat-tip bool,
u aħna wkoll jixtiequ # Jinkludu lib.h standard għall-libreriji standard
li jinkludu malloc, u ħielsa, u kollha ta 'dak.
Allura, zoom out, aħna qed tmur biex nieqaf.
Ejja jippruvaw jagħmlu ċert li dan fil-fatt ma jikkompilaw.
Naraw li dan huwa minnu, hekk aħna qed fuq il-binarju dritt.
>> Ejja jiftħu binary_tree.c mill-ġdid.
Hija jikkompila. Ejja jinżlu u kun żgur li aħna daħħal xi sejħiet għal ma fiha l-funzjoni tagħna -
biss tagħmel ċert li dan huwa kollu tajjeb u tajba.
Per eżempju, meta għamilna xi lookups fil siġra tagħna qabel,
aħna ppruvaw li tfittex l-valuri 6, 10, u 1, u aħna kien jaf li kienet 6 fil-siġra,
10 ma kienx fil-siġra, u 1 kienx fil-siġra jew.
Ejja tuża dawk is-sejħiet tal-kampjuni bħala mod biex insemmu jekk jew le
ma fiha l-funzjoni tagħna qed taħdem.
Sabiex tagħmel dan, jien ser tuża l-funzjoni printf,
u aħna qed tmur biex jistampa r-riżultat tas-sejħa għall fih.
Jien ser jitqiegħdu fil string "fih (% d) = għax
aħna qed tmur biex plagg fil-valur li aħna qed tmur biex tfittex,
u =% s \ n "u l-użu li bħala string format tagħna.
Aħna biss se tara - litteralment jistampa fuq l-iskrin -
dak qisu sejħa funzjoni.
Dan mhuwiex attwalment l-sejħa funzjoni.
Dan huwa biss sekwenza mfassla biex dehra ta 'sejħa funzjoni.
>> Issa, aħna qed tmur biex plagg fil-valuri.
Aħna ser tipprova fih fis-6,
u allura dak li aħna qed tmur biex tagħmel hawnhekk huwa użu li operatur tenarji.
Ejja naraw - fih 6 - hekk, issa stajt jinsabu 6 u jekk fih 6 huwa veru,
l-sekwenza li aħna qed tmur biex jibagħtu lill-karattru format tal-% s
se tkun l-sekwenza "vera".
Ejja iscroll fuq ftit.
Inkella, irridu li jibgħat l-sekwenza "false" jekk fih 6 dikjarazzjonijiet foloz.
Dan huwa ftit goofy li tħares, iżda I figura I jistgħu wkoll juru
dak l-operatur ternarji qisu peress li aħna ma bbenefikawx għall awhile.
Dan se jkun sbieħ, mod handy biex insemmu jekk ma fiha l-funzjoni tagħna qed taħdem.
Jien ser iscroll lura fuq ix-xellug,
u jien ser kopja u paste din il-linja għal xi ftit drabi.
Huwa biddel xi wħud minn dawn il-valuri madwar,
għalhekk dan se jkun 1, u dan se jkun ta '10.
>> Fuq dan il-punt konna ltqajna funzjoni ma fiha sbieħ.
Imxejna ltqajna xi testijiet, u aħna ser tara jekk dan xogħlijiet kollha.
Fuq dan il-punt konna bil-miktub kodiċi ftit aktar.
Ħin li nieqaf out u kun żgur li kollox għadu jikkompila.
Nieqaf out, u issa ejja tipprova tagħmel siġra binarju mill-ġdid.
Ukoll, jidher qisu konna ltqajna żball,
u konna ltqajna dan b'mod espliċitu li tiddikjara l-funzjoni librerija printf.
Jidher qisu għandna bżonn li jmorru fi u # Jinkludu standardio.h.
U ma 'dan, kollox għandu jiġbor. Aħna kollha tajbin.
Issa ejja tipprova taħdem siġar binarju u ara dak li jiġri.
Hawnhekk aħna,. / Binary_tree,
u naraw li, kif aħna mistennija -
għaliex aħna ma implimentawx fih għadhom,
jew pjuttost, konna biss jitqiegħed fl-ritorn foloz -
naraw li huwa biss jirritorna falza għalihom kollha,
hekk li kollox jaħdem għall-parti l-kbira pjuttost tajjeb.
>> Ejja ħa mmorru lura u fil-fatt jimplimentaw fih f'dan il-punt.
Jien ser iscroll, zoom fi, u -
ftakar, l-algoritmu li aħna użati kienet li bdejna fil-node għerq
u mbagħad kull node li aħna jiltaqgħu, nagħmlu paragun,
u bbażat fuq il-paragun aħna jew jimxu lejn il-wild xellug jew lill-wild dritt.
Dan ser tfittex simili ħafna għall-kodiċi tfittxija binarju li aħna kiteb aktar kmieni fi żmien.
Meta nibdew off, nafu li aħna rridu li jżommu lill-node kurrenti
li aħna qed tħares lejn, u l-node attwali se tkun initialized għall-node għerq.
U issa, aħna qed tmur biex iżommu għaddejjin mill-siġra,
u ftakar li kundizzjoni waqfien tagħna -
meta aħna effettivament maħduma permezz tal-eżempju bl-idejn -
kien meta aħna jiltaqgħu node null,
mhux meta ħarisna lejn tifel null,
iżda pjuttost meta aħna fil-fatt mċaqilqa għal node fil-siġra
u sabet li aħna qed fuq node null.
Aħna ser jtenni sakemm kur mhuwiex ugwali għal null.
U dak li aħna se jagħmlu?
Aħna ser tittestja jekk (kur -> == valur valur),
allura nafu li aħna ħadthom attwalment sabet l-node li aħna qed tfittex.
Allura hawn, nistgħu ritorn vera.
Inkella, irridu naraw jekk il-valur huwa inqas mill-valur.
Jekk il-valur tal-node attwali hija inqas mill-valur aħna qed tfittex,
aħna qed tmur biex jimxu lejn il-lemin.
Allura, kur = kur -> right_child, u inkella, aħna qed tmur biex jimxu lejn ix-xellug.
= kur kur -> left_child;. Pretty sempliċi.
>> You probabbilment jirrikonoxxu l-linja li tidher simili ħafna għal dan mill-
tfittxija binarja aktar kmieni fit-terminu, ħlief allura konna jittrattaw baxx, medju, u għoli.
Hawnhekk, aħna biss għandek tfittex fil-valur kurrenti,
dan huwa sbieħ u sempliċi.
Ejja kun żgur din il-kodiċi qed taħdem.
L-ewwel, kun żgur li tiġbor. Qisu ma.
Ejja nippruvaw ġestjoni tiegħu.
U fil-fatt, hija prints dak kollu li aħna mistennija.
Hija tikkonstata 6 fil-siġra, ma ssib 10 minħabba 10 mhuwiex fil-siġra,
u ma jsibu 1 jew għaliex 1 wkoll mhux fil-siġra.
Kessaħ Jittieħed.
>> Alright. Ejja ħa mmorru lura għall-ispeċifikazzjoni tagħna u ara dak li jmiss.
Issa, huwa jrid iżid punti ta 'konġunzjoni xi aktar biex siġra tagħna.
Hija trid li żżid 5, 2, u 8, u kun żgur li tagħna fiha Kodiċi
għadu jaħdem kif mistenni.
Ejja jmorru jagħmlu dan.
Fuq dan il-punt, aktar milli tagħmel dik il-kopja annoying u paste mill-ġdid,
ejja tikteb funzjoni li attwalment joħolqu node.
Jekk aħna iscroll-triq kollha lejn prinċipali, naraw li aħna kont qed tagħmel dan
Kodiċi simili ħafna fuq u aktar mill-ġdid kull darba li aħna nixtiequ noħolqu node.
>> Ejja jiktbu funzjoni li fil-fatt se tibni node għalina u jirritornaha.
Jien ser sejħa hija build_node.
Jien ser tibni node b'valur partikolari.
Zoom fil hawn.
L-ewwel ħaġa li jien ser tagħmel hu li attwalment joħolqu spazju għall-node fuq il-borġ.
Allura, node * n = malloc (sizeof (node)); -; n> valur valur =
u allura hawnhekk, jien biss ser initialize kollha ta 'l-oqsma li jkun valuri xierqa.
U fl-aħħar nett, aħna ser terġa 'lura node tagħna.
Alright. Ħaġa waħda li wieħed jinnota li din il-funzjoni dritt hawn
se jirritorna pointer għall-memorja li ġie borġ-allokazzjoni.
X'hemm sbieħ dwar dan hija li dan node issa -
għandna li tiddikjaraha fuq il-borġ għaliex jekk aħna iddikjarat fuq il-munzell
aħna ma jkunux jistgħu jagħmlu dan f'din il-funzjoni bħal din.
Li memorja se jmorru barra ta 'ambitu
u jkun invalidu jekk aħna ppruvaw li jkollhom aċċess għaliha aktar tard.
Peress li aħna tiddikjara borġ-allokazzjoni tal-memorja,
aħna ser ikollok tieħu kura ta 'ħelsien iktar tard
għall-programm tagħna biex ma jnixxi ebda memorja.
Imxejna ġiet punting fuq li għal kull ħaġa oħra fil-kodiċi
biss għall-finijiet sempliċità fil-ħin,
imma jekk inti qatt tikteb funzjoni li tidher bħal dan
fejn inti ħadthom ltqajna - xi sejħa hija ta 'malloc jew realloc ġewwa -
inti tixtieq li tagħmel ċert li inti tpoġġi xi tip ta 'kumment up hawn li tgħid,
ħej, inti taf, jirritorna node borġ 'allokat initialized mal-valur għadda-in.
U allura inti tixtieq li tagħmel ċert li inti tpoġġi fil xi tip ta 'nota li tgħid
l-sejjieħ għandha tilliberalizza l-memorja lura.
B'dan il-mod, jekk xi ħadd qatt tmur u l-użi li l-funzjoni,
huma jafu li dak kollu li jiksbu lura minn dik il-funzjoni
f'xi punt se jeħtieġu li jiġu liberati.
>> Jekk wieħed jassumi li kollox huwa tajjeb u tajba hawn,
nistgħu mmorru l isfel fil-kodiċi tagħna u jissostitwixxi kollha ta 'dawn il-linji dritt hawn
ma 'sejħiet għal funzjoni tagħna node jibnu.
Ejja nagħmlu dan verament malajr.
Il-parti l-waħda li aħna ma tkunx qed tmur biex jissostitwixxu hija din il-parti stabbiliti hawn
fil-qiegħ fejn aħna attwalment wajer ta 'l-għoqiedi għall-punt ta' xulxin,
minħabba li aħna ma tistax tagħmel fil-funzjoni tagħna.
Imma, ejja nagħmlu għerq = build_node (7); node * 3 = build_node (3);
node * 6 = build_node (6); node * 9 = build_node (9);.
U issa, aħna wkoll ried iżid lymph għall -
node * 5 = build_node (5); node * 8 = build_node (8);
u dak li kien l-node oħra? Ejja naraw hawnhekk. Ridna wkoll żżid 2 -
node * 2 = build_node (2);.
Alright. Fuq dan il-punt, aħna nafu li konna ltqajna l-7, it-3, il-9, u l-6
kollha fili up xieraq, iżda xi ngħidu dwar il-5, l-8, u l-2?
Biex iżommu kollox fl-ordni xierqa,
aħna nafu li tifel dritt 3 huwa 6.
Għalhekk, jekk aħna qed tmur biex iżżid il-5,
il-5 jappartjeni wkoll fil-lemin tal-siġra li minnhom 3 hija l-għerq,
hekk 5 jappartjeni bħala l-wild xellug ta '6.
Nistgħu nagħmlu dan billi qal, 6 -> left_child = 5;
u mbagħad l-8 jappartjeni bħala l-wild xellug tal 9, hekk 9 -> left_child = 8;
u mbagħad 2 huwa l-wild xellug ta '3, sabiex inkunu nistgħu nagħmlu dan up hawn - thee -> left_child = 2;.
Jekk inti ma pjuttost isegwu flimkien ma 'dan, nissuġġerixxi inti tiġbed it out yourself.
>> Alright. Ejja jiffranka dan. Ejja tmur u kun żgur li jikkompila,
u allura nistgħu żid fis-sejħiet fih tagħna.
Id-Dehra kollox xorta jikkompila.
Ejja jmorru fi u żid f'xi fih sejħiet.
Għal darb'oħra, jien ser tagħmel ftit ta 'kopja u paste.
Issa ejja tfittex 5, 8, u 2. Alright.
Ejja kun żgur li dan kollu jidher tajjeb xorta. Great! Ħlief u nieqaf.
Issa ejja jagħmlu, tiġbor, u issa ejja jimxu.
Mir-riżultati, jidher qisu kollox qed taħdem biss sbieħ u tajjeb.
Great! Allura issa konna ltqajna ma fiha tagħna jiffunzjonaw bil-miktub.
Ejja jimxu fuq u jibdew jaħdmu fuq kif daħħal lymph fis-siġra
peress li, kif aħna qed tagħmel dan id-dritt issa, l-affarijiet mhumiex ħafna pretty.
>> Jekk immorru lura għall-ispeċifikazzjoni,
hija tistaqsi magħna biex jiktbu funzjoni msejħa daħħal - għal darb'oħra, jirritornaw bool
għal jekk nistgħu attwalment daħħal il-node fil-siġra -
u allura l-valur li ddaħħal fil-siġra hija speċifikata bħala
l-argument biss għall-funzjoni daħħal tagħna.
Aħna se terġa 'lura minnu jekk nistgħu tabilħaqq daħħal il-valur node fih fil-siġra,
li jfisser li aħna, wieħed, kellha memorja biżżejjed,
u mbagħad tnejn, li node ma jkunux diġà jeżistu fl-siġra mill -
ftakar, aħna mhux se jkollhom valuri duplikat fil-siġra, biss biex jagħmlu l-affarijiet sempliċi.
Alright. Back għall-kodiċi.
Jiftħuh. Zoom fi ftit, imbagħad iscroll.
Ejja tpoġġi l-funzjoni daħħal dritt fuq il-ma fiha.
Għal darb'oħra, li għaddej biex jiġu msejħa daħħal bool (int valur).
Agħti spazju ftit aktar, u mbagħad, bħala default,
ejja tpoġġi lura falz fl-aħħar nett.
Issa l isfel fil-qiegħ, ejja imorru quddiem u minflok manwalment bini tal-lymph
fl prinċipali nfusna u wajers minnhom sa punt lil xulxin simili aħna qed tagħmel,
aħna ser jiddependu fuq il-funzjoni daħħal tagħna biex tagħmel dan.
Aħna mhux se tistrieħ fuq il-funzjoni daħħal tagħna biex tinbena l-siġra kollu mill-bidu għadha biss,
iżda aħna ser teħles minn dawn il-linji - we'll jikkummentaw out dawn il-linji -
li jibnu l-lymph 5, 8, u 2.
U minflok, aħna ser daħħal sejħiet għall-funzjoni daħħal tagħna
biex tiżgura li li attwalment xogħlijiet.
Here we go.
>> Issa konna ikkummenta out dawn il-linji.
Aħna biss ikollhom 7, 3, 9, u 6 fil siġra tagħna f'dan il-punt.
Biex tkun żgur li din hija kollha tax-xogħol,
nistgħu zoom out, tagħmel siġra binarju tagħna,
run, u nistgħu naraw li fih huwa issa tgħidilna li aħna qed totalment dritt -
5, 8, u 2 m'għadhomx fil-siġra.
Mur lura fil-kodiċi,
u kif ser nieħdu daħħal?
Ftakar dak li għamilna meta konna fil-fatt li jdaħħal 5, 8, u 2 qabel.
Aħna lagħbu din il-logħba Plinko fejn bdejna fil-għerq,
niżlet il-wieħed siġra minn wieħed wieħed
sakemm sibna l-vojt xieraq,
u allura aħna fili fil-node fil-post xieraq.
Aħna qed tmur biex jagħmlu l-istess ħaġa.
Dan huwa bażikament simili kitba l-kodiċi li aħna użati fil-funzjoni fih
biex issib l-post fejn il-node għandu jkun,
u allura aħna qed biss jmorru biex tiddaħħal l-node hemm dritt.
Nibdew tagħmel dan.
>> Allura aħna għandna node * kur = għerq; aħna qed biss jmorru biex isegwu l-kodiċi fih
sakemm insibu li ma pjuttost xogħol għalina.
Aħna ser jgħaddu mill-siġra filwaqt li l-element attwali mhix null,
u jekk insibu valur li kur hija ugwali għall-valur li aħna qed jippruvaw daħħal -
ukoll, dan huwa wieħed mill-każijiet li fihom aħna ma setgħux effettivament daħħal il-node
fil-siġra għax dan ifisser li għandna valur duplikat.
Hawnhekk aħna qed attwalment għaddejjin li jirritornaw falza.
Issa, inkella jekk il-valur kur hija inqas mill-valur,
issa nafu li nimxu lejn il-lemin
minħabba li l-valur jappartjeni fil-nofs tal-lemin tas-siġra kur.
Inkella, aħna qed tmur biex jimxu lejn ix-xellug.
Li bażikament ma fiha tagħna jaħdem hemm dritt.
>> Fuq dan il-punt, ladarba aħna ħadthom temmew dan loop filwaqt li,
pointer kur tagħna se tkun tipponta lejn null
jekk il-funzjoni ma tkunx diġà lura.
Aħna li għaldaqstant għandha kur fil-post fejn irridu li daħħal il-node ġdid.
Dak li għad irid isir huwa li fil-fatt jiżviluppaw l-node ġdid,
li nistgħu nagħmlu pjuttost faċilment.
Nistgħu nużaw super-handy funzjoni tagħna node jibnu,
u xi ħaġa li aħna ma tagħmel preċedenti -
aħna biss tip ta 'ħa għall mogħtija iżda issa aħna ser nagħmlu biss biex tiżgura -
aħna ser test biex tiżgura li l-valur lura mill node ġdid kien effettivament
mhux null, għaliex aħna ma jridu jibdew aċċess li l-memorja jekk huwa null.
Aħna tista 'test biex tiżgura li node ġdid mhuwiex ugwali għal null.
Jew minflok, nistgħu biss tara jekk fil-fatt hu null,
u jekk huwa null, allura nistgħu biss ritorn foloz kmieni.
>> Fuq dan il-punt, irridu wajer node ġdid fil-post xieraq tagħha fil-siġra.
Jekk inħarsu lura lejn prinċipali u fejn konna fil-fatt wiring fil-valuri qabel,
naraw li l-mod aħna kienu qed jagħmlu dan meta ridna li tpoġġi 3 fil-siġra
kienet aħna aċċessati l-minuri xellug tal għerq.
Meta npoġġux 9 fil-siġra, kellna biex jaċċessaw il-wild dritt ta 'l-għerq.
Kellna li jkollhom pointer lill-ġenitur sabiex twaqqaf il-valur il-ġdid fis-siġra.
Scrolling back up li daħħal, li mhux ser pjuttost xogħol hawn
għaliex aħna ma jkollhomx pointer ġenitur.
Dak li rridu li tkun tista 'tagħmel huwa, f'dan il-punt,
jiċċekkjaw il-valur tal-ġenitur u ara - ukoll, gosh,
jekk il-valur tal-ġenitur huwa inqas mill-valur kurrenti,
imbagħad tifel dritt tal-ġenitur għandha tkun l-node ġdid;
xort'oħra, tfal xellug tal-ġenitur għandha tkun l-node ġdid.
Iżda, aħna ma jkollhomx dan il-werrej prinċipali għadhom pjuttost.
>> Sabiex tikseb dan, aħna qed attwalment se jkollhom track kif aħna jgħaddu mill-siġra
u ssib il-post xieraq fil loop tagħna hawn fuq.
Nistgħu nagħmlu dan billi scrolling back up għall-quċċata tal-funzjoni daħħal tagħna
u t-traċċar ieħor varjabbli pointer imsejjaħ il-ġenitur.
Aħna ser tistabbilixxi li ugwali għal null inizjalment,
u mbagħad kull darba li jgħaddu mill-siġra,
aħna qed tmur biex jistabbilixxu l-pointer ġenitur biex tqabbel il-pointer kurrenti.
Set ġenitur ugwali għal cur.
Dan il-mod, kull darba immorru permezz,
aħna qed tmur biex jiżguraw li l-pointer kurrenti gets inkrementat
il-pointer ġenitur ġej dan - biss livell wieħed ogħla mill-pointer attwali fil-siġra.
Dan kollu jidher pjuttost tajba.
>> Naħseb li l-unika ħaġa li aħna inneħħu jridu jaġġustaw hija din tinbena null node jirritornaw.
Sabiex tikseb jibnu node biex effettivament b'suċċess ritorn null,
aħna ser ikollhom jimmodifikaw dan il-kodiċi,
għaliex hawnhekk, aħna qatt ttestjati biex tiżgura li malloc lura pointer valida.
Għalhekk, jekk (n = NULL!), Allura -
jekk malloc rritornaw pointer valida, allura aħna ser initialize dan;
mod ieħor, aħna ser biss jirritorna u li se jispiċċaw jirritornaw null għalina.
Issa kollha jistenna pretty tajba. Ejja jagħmlu ċert li din fil-fatt jikkompila.
Għamla siġra binarju, u oh, konna ltqajna xi għalf jiġri hawn.
>> Imxejna ltqajna dikjarazzjoni impliċita ta 'funzjoni jibnu node.
Għal darb'oħra, ma 'dawn kompilaturi, aħna qed tmur biex tibda fil-quċċata.
Dak li għandu jfisser hu li jien ssejjaħ jibnu node qabel stajt attwalment ddikjarat lilha.
Ejja ħa mmorru lura għall-kodiċi verament malajr.
Skrollja 'l isfel, u żgur biżżejjed, funzjoni daħħal tiegħi huwa ddikjarat
fuq il-funzjoni node jibnu,
imma jien jippruvaw jużaw tibni node ġewwa tal daħħal.
Jien ser tmur fi u kopja - u mbagħad paste l-mod jibnu funzjoni node up hawn fil-quċċata.
B'dan il-mod, wieħed jittama li se jaħdmu. Ejjew nagħtu dan ieħor tmur.
Issa dan kollu jikkompila. Kollha hija tajba.
>> Iżda f'dan il-punt, aħna ma attwalment imsejħa funzjoni daħħal tagħna.
Aħna biss jafu li jikkompila, hekk ejja jmorru fi u mqiegħda xi sejħiet pulzieri
Ejja nagħmlu dan fil-funzjoni ewlenija tagħna.
Hawnhekk, aħna ikkummenta out 5, 8, u 2,
u allura aħna ma wajer lilhom stabbiliti hawn.
Ejja jagħmlu xi sejħiet li ddaħħal,
u ejja wkoll jużaw l-istess tip ta 'għalf li aħna użati
meta għamilna dawn is-sejħiet printf biex tiżgura li kollox ma jiksbu jiddaħħal kif suppost.
Jien ser kopja u paste,
u minflok fih aħna qed tmur biex tagħmel daħħal.
U minflok 6, 10, u 1, aħna qed tmur għall-użu 5, 8, u 2.
Dan għandu nisperaw daħħal 5, 8, u 2 fil-siġra.
Jikkompilaw. Kollha hija tajba. Issa aħna ser tmexxi effettivament programm tagħna.
>> Kollox lura falza.
Allura, 5, 8, u 2 ma tmurx, u jidher qisu ma fiha ma jsibu lilhom lanqas.
X'qed jiġri? Ejja zoom out.
L-ewwel problema kienet li daħħal deher li jirritornaw falza,
u jidher qisu dan għaliex aħna xellug fis-sejħa lura falza tagħna,
u aħna qatt fil-fatt ritornat veru.
Aħna tista 'tistabbilixxi li up.
It-tieni problema hija, issa anke jekk nagħmlu - ħlief dan, nieqaf dan,
run jagħmlu mill-ġdid, li hija tiġbor, imbagħad run dan -
naraw li xi ħaġa oħra ġara hawn.
Il-5, 8, u 2 kienu għadhom qatt ma jinstabu fil-siġra.
Allura, x'inhu għaddej?
>> Ejja tagħti ħarsa lejn dan il-kodiċi.
Ejja naraw jekk nistgħu figura dan.
Nibdew mal-ġenitur ma jkunx null.
Waqqafna l-pointer attwali ugwali għall-pointer għerq,
u aħna qed tmur biex jaħdmu mod tagħna isfel permezz tal-siġra.
Jekk l-node attwali mhuwiex null, allura nafu li nistgħu jimxu l isfel ftit.
Waqqafna pointer parent tagħna li tkun ugwali għall-pointer attwali,
ċċekkjati l-valur - jekk il-valuri huma l-istess aħna lura falza.
Jekk il-valuri huma inqas aħna mċaqilqa lejn il-lemin;
mod ieħor, aħna mċaqalqa lejn ix-xellug.
Imbagħad aħna nibnu node. I ser zoom fi ftit.
U hawn, aħna qed tmur biex tipprova wajer ta l-valuri li huma l-istess.
X'qed jiġri? Ejja naraw jekk possibbilment Valgrind tista 'tagħtina ħjiel.
>> I simili għall-użu Valgrind biss minħabba Valgrind verament malajr runs
u jgħidlek jekk hemm xi żbalji memorja.
Meta aħna run Valgrind dwar il-kodiċi,
kif tista 'tara hit here--Valgrind./binary_tree--and dritt tidħol.
Inti tara li aħna ma jkollhom l-ebda żball fil-memorja, hekk jidher qisu kollox huwa okay s'issa.
We do jkollhom xi tnixxijiet memorja, li nafu, għaliex aħna mhux qed
jiġri biex ħielsa xi lymph tagħna.
Ejja tipprova taħdem GDB biex tara x'inhu attwalment għaddejjin.
Aħna ser tagħmel GDB. / Binary_tree. Hija Booted up biss multa.
Ejja jistabbilixxu punt tal-qasma fuq daħħal.
Ejja run.
Jidher qisu aħna qatt attwalment imsejħa daħħal.
Jidher qisu l-problema kienet biss li meta I biddel l isfel hawn prinċipali -
kollha ta 'dawn is-sejħiet printf mill fiha -
Jien qatt ma attwalment nbidlu dawn li jsejħu daħħal.
Issa ejja jipprova hu. Ejja jikkompilaw.
Kollha jidher tajjeb hemm. Issa ejja ipprova ġestjoni tiegħu, tara x'jiġri.
Alright! Kollox jidher pjuttost tajba hemmhekk.
>> Il-ħaġa finali li wieħed jaħseb dwar huwa, hemm xi każijiet tarf għal dan daħħal?
U jirriżulta li, ukoll, il-każ tarf wieħed li huwa dejjem interessanti li wieħed jaħseb dwar
huwa, x'jiġri jekk siġra tiegħek ikun vojt u inti sejħa din il-funzjoni daħħal?
Se taħdem? Ukoll, ejja jipprova hu.
- Binary_tree c. -
Il-mod kif aħna qed tmur biex jittestjaw dan, aħna qed tmur biex jinżlu għal funzjoni prinċipali tagħna,
u minflok wiring dawn in-nodi up bħal dan,
aħna qed biss jmorru biex jikkummenta l-ħaġa sħiħa,
u minflok ta 'wajers ta' l-lymph nfusna,
nistgħu attwalment biss jimxi 'l quddiem u ħassar kollha ta' dan.
Aħna ser tagħmel dak kollu sejħa li daħħal.
Allura, ejja do - minflok ta '5, 8, u 2, aħna qed tmur biex daħħal 7, 3, u 9.
U allura aħna ser ukoll tixtieq li daħħal 6 kif ukoll.
Save. Nieqaf. Għamla siġra binarju.
Dan kollu jikkompila.
Nistgħu biss run kif u tara x'jiġri,
iżda huwa wkoll se tkun verament importanti li jiġi żgurat li
aħna m'għandniex xi żbalji memorja,
peress li dan huwa wieħed mill-każijiet tarf tagħna li nafu dwar.
>> Ejja kun żgur li taħdem sew taħt Valgrind,
li aħna ser nagħmlu billi biss running Valgrind. / binary_tree.
Jidher qisu aħna tabilħaqq għandna waħda iżbalji minn kuntest -
aħna għandna dan tort segmentazzjoni.
Dak li ġara?
Valgrind attwalment tgħidilna fejn hu.
Zoom out ftit.
Jidher qisu dan qed jiġri fil-funzjoni daħħal tagħna,
fejn għandna taqra invalidu 'daqs 4 fi daħħal, linja 60.
Ejja mmorru lura u tara x'inhu għaddej hawn.
Zoom out verament malajr.
I jixtiequ jagħmlu ċert li din ma tmurx għall-tarf tal-iskrin sabiex nistgħu naraw kollox.
Iġbed li fi ftit. Alright.
Skrollja 'l isfel, u l-problema hija dritt hawn.
X'jiġri jekk irridu jiksbu l isfel u node attwali tagħna hija diġà null,
node prinċipali tagħna huwa null, hekk jekk inħarsu up fuq nett, dritt hawn -
jekk dan loop filwaqt li qatt ma attwalment tesegwixxi
għaliex il-valur attwali tagħna huwa null - għeruq tagħna huwa null tant kur huwa null -
imbagħad parent tagħna qatt gets stabbiliti biex kur jew għal valur validu,
hekk, ġenitur se jkun ukoll null.
Għandna bżonn li wieħed jiftakar sabiex jikkontrolla għal dak
mill-ħin aħna nikseb stabbiliti hawn, u nibdew aċċess valur tal-ġenitur.
Allura, dak li jiġri? Ukoll, jekk il-ġenitur huwa null -
jekk (ġenitur == NULL) - allura aħna nafu li
m'għandux ikun hemm xejn fil-siġra.
Għandna nkunu qed jipprova daħħalha fil-għerq.
Nistgħu nagħmlu dan billi sempliċiment jistabbilixxi l-għerq ugwali għall-node ġdid.
Imbagħad f'dan il-punt, aħna ma attwalment jridu jgħaddu dawn l-affarijiet l-oħra.
Minflok, dritt hawn, nistgħu nagħmlu la inkella ta 'jekk-ieħor,
jew nistgħu jikkombinaw kollox up here b'mod ieħor,
iżda hawnhekk aħna ser biss użu ieħor u tagħmel dan il-mod.
Issa, aħna qed tmur biex tittestja biex taċċerta ruħek li ġenitur tagħna ma huwiex null
qabel mbagħad fil-fatt jippruvaw jiksbu aċċess għas-oqsma tagħha.
Dan għandu jgħina tevita l-tort segmentazzjoni.
Allura, aħna nieqaf, zoom out, tikkompila, run.
>> Ebda żbalji, iżda xorta għad għandhom mazz ta 'tnixxijiet memorja
għaliex aħna ma ħielsa xi lymph tagħna.
Iżda, jekk immorru up hawn u nħarsu lejn printout tagħna,
naraw li, ukoll, qisu kollha ta 'inserts tagħna kienu jirritornaw vera, li hija tajba.
L-inserzjonijiet huma kollha vera,
u mbagħad is-sejħiet fih xierqa huma wkoll veru.
>> Tajba tax-xogħol! Jidher qisu aħna ħadthom b'suċċess bil-miktub daħħal.
Li kollox għandna għall Speċifikazzjoni din il-ġimgħa Set Problema.
Waħda mill-isfidi gost li wieħed jaħseb dwar huwa kif inti fil-fatt imorru fil
u ħielsa kollha tal-lymph f'dan siġra.
Nistgħu nagħmlu hekk numru ta 'modi differenti,
imma jien ser leave li sa inti biex esperiment,
u bħala sfida gost, ipprova u kun żgur li inti tista 'tagħmel ċert
li dan ir-rapport Valgrind prospetti ebda żbalji u l-ebda tnixxijiet.
>> Xorti tajba dwar din il-ġimgħa sett Huffman problema kodifikazzjoni,
u aħna ser tara inti ġimgħa d-dieħla!
[CS50.TV]