Wake wazibuza ukuthi ungayihlela kanjani kahle futhi ugcine idatha ku-JavaScript? Izihlahla kanambambili ziyisakhiwo sedatha esiyisisekelo esikuvumela ukuthi wenze lokho kanye. Kulesi sihloko, uzongena emhlabeni othakazelisayo wezihlahla kanambambili ku-JavaScript. Uzofunda ukuthi ziyini, ungazisebenzisa kanjani, ungayenza kanjani imisebenzi eyisisekelo nethuthukisiwe, futhi uthole izinqubo ezingcono kakhulu zokusebenza nazo. Lungela ukwandisa ulwazi lwakho futhi uthathe amakhono akho wokuhlela uwayise kwelinye izinga!
Kanambambili Izihlahla ku-JavaScript
Izihlahla ezimbili ziyisakhiwo sedatha esilandelanayo lapho i-node ngayinye ingaba nezingane ezimbili okungenani: ingane yesobunxele kanye nengane yesokudla. I-node ngayinye imelelwa yinto equkethe inani kanye nezinkomba ezinganeni zayo. Lesi sakhiwo siguquguquka kakhulu futhi sisetshenziswa emikhakheni eminingi yesayensi yekhompyutha, njengokuphathwa kwedatha, ama-algorithms okusesha , kanye nokwenza ngcono.
Kungani ufunda ngezihlahla kanambambili kuJavaScript?
Ulwazi lwezihlahla kanambambili ku-JavaScript lubalulekile kunoma yimuphi umhleli ofuna ukuqonda nokuxazulula izinkinga eziyinkimbinkimbi ngendlela efanele. Izihlahla kanambambili zisetshenziswa kakhulu kuma-algorithms osesho, izakhiwo zedatha ethuthukisiwe, nama-algorithms wokwenza ngokugcwele. Ukwazi ukusebenzisana nabo kuzokuvumela ukuthi ubhale amakhodi asebenza kahle kakhulu, angakala, futhi asebenza kahle kakhulu. Ukwengeza, abaqashi abaningi bayabazisa abathuthukisi abanolwazi lokuphatha izihlahla kanambambili, okungakuvulela amathuba amasha emisebenzi.
Ukusebenzisa isihlahla kanambambili ku-JavaScript
Ngaphambi kokuthi singene ekusebenzeni nasezinkambisweni ezihamba phambili, kubalulekile ukuqonda ukuthi sisetshenziswa kanjani isihlahla esinambambili ku-JavaScript. Kunezindlela eziningana zokwenza lokhu, kodwa enye evame kakhulu ukusebenzisa amakilasi kanye nezinkomba zezingane. Nasi isibonelo esiyisisekelo sokuthi ukuqaliswa kwesihlahla esinambambili ku-JavaScript kungabukeka kanjani:
class Nodo {
constructor(valor) {
this.valor = valor;
this.izquierdo = null;
this.derecho = null;
}
}
class ArbolBinario {
constructor() {
this.raiz = null;
}
// Métodos del árbol binario
}
Kulesi sibonelo, sakha ikilasi Nodo elimele indawo ngayinye yesihlahla, kanye nesigaba ArbolBinario elibhekele ukuphatha ukwakheka nokusebenza kwesihlahla. Indawo ngayinye inenani nezinkomba zezingane zayo kwesokunxele nakwesokudla, eziqaliswe ngokuthi null okuzenzakalelayo. Impande yomuthi imelelwa imfanelo raiz wekilasi ArbolBinario.
Operations Basic on Kanambambili Izihlahla
Uma ususebenzise isihlahla kanambambili ku-JavaScript, ungenza imisebenzi eyisisekelo ehlukahlukene kuso. Le misebenzi ikuvumela ukuthi wengeze, ususe, futhi useshele izinto esihlahleni. Ake sibheke eminye yemisebenzi evame kakhulu:
Ukufaka isici esihlahleni kanambambili
Ukufaka i-elementi esihlahleni kanambambili kuhilela ukuthola indawo elungile yenodi entsha nokuyixhumanisa ngokufanele namanodi akhona. Nasi isibonelo sendlela yokufaka i-elementi esihlahleni kanambambili kungenziwa:
class ArbolBinario {
// ...
insertar(valor) {
const nuevoNodo = new Nodo(valor);
if (this.raiz === null) {
this.raiz = nuevoNodo;
} else {
this.insertarNodo(this.raiz, nuevoNodo);
}
}
insertarNodo(nodo, nuevoNodo) {
if (nuevoNodo.valor < nodo.valor) {
if (nodo.izquierdo === null) {
nodo.izquierdo = nuevoNodo;
} else {
this.insertarNodo(nodo.izquierdo, nuevoNodo);
}
} else {
if (nodo.derecho === null) {
nodo.derecho = nuevoNodo;
} else {
this.insertarNodo(nodo.derecho, nuevoNodo);
}
}
}
}
Kulesi sibonelo, umsebenzi insertar(valor) idala i-node entsha enenani elishiwo futhi ihlola ukuthi impande yesihlahla iyiyo yini null. Uma kunjalo, setha inodi entsha njengempande. Uma kungenjalo, cela umsebenzi insertarNodo(nodo, nuevoNodo) ukuthola indawo efanele yenodi entsha.
Icinga into ethile esihlahleni kanambambili
Ukusesha i-elementi esihlahleni kanambambili kuhlanganisa ukudabula isihlahla ngendlela ehlelekile ukuze uthole indawo equkethe inani elifunekayo. Nasi isibonelo sokuthi ukusesha i-elementi esihlahleni kanambambili kungenziwa kanjani:
class ArbolBinario {
// ...
buscar(valor) {
return this.buscarNodo(this.raiz, valor);
}
buscarNodo(nodo, valor) {
if (nodo === null || nodo.valor === valor) {
return nodo;
} else if (valor < nodo.valor) {
return this.buscarNodo(nodo.izquierdo, valor);
} else {
return this.buscarNodo(nodo.derecho, valor);
}
}
}
Kulesi sibonelo, umsebenzi buscar(valor) icela umsebenzi buscarNodo(nodo, valor) ukudlulisa impande yesihlahla kanye nenani ofuna ukulicinga. Umsebenzi buscarNodo(nodo, valor) yenza ukusesha okuphindaphindayo esihlahleni, ibheka ukuthi i-node yamanje iyiyo yini null noma uma inani layo lifana nevelu eliseshiwe. Kuye ngokuqhathanisa, ukusesha kuyaqhubeka kwengane kwesokunxele noma kwesokudla.
Ukususa isici esihlahleni kanambambili
Ukukhipha i-elementi esihlahleni kanambambili kungaba yinkimbinkimbi, njengoba udinga ukucabangela izimo ezihlukene kuye ngesakhiwo sesihlahla. Nasi isibonelo sendlela ukususa i-elementi esihlahleni kanambambili kungenziwa kanjani:
class ArbolBinario {
// ...
eliminar(valor) {
this.raiz = this.eliminarNodo(this.raiz, valor);
}
eliminarNodo(nodo, valor) {
if (nodo === null) {
return null;
} else if (valor < nodo.valor) {
nodo.izquierdo = this.eliminarNodo(nodo.izquierdo, valor);
return nodo;
} else if (valor > nodo.valor) {
nodo.derecho = this.eliminarNodo(nodo.derecho, valor);
return nodo;
} else {
if (nodo.izquierdo === null && nodo.derecho === null) {
return null;
} else if (nodo.izquierdo === null) {
return nodo.derecho;
} else if (nodo.derecho === null) {
return nodo.izquierdo;
} else {
const sucesor = this.encontrarSucesor(nodo.derecho);
nodo.valor = sucesor.valor;
nodo.derecho = this.eliminarNodo(nodo.derecho, sucesor.valor);
return nodo;
}
}
}
encontrarSucesor(nodo) {
let sucesor = nodo;
while (sucesor.izquierdo !== null) {
sucesor = sucesor.izquierdo;
}
return sucesor;
}
}
Kulesi sibonelo, umsebenzi eliminar(valor) icela umsebenzi eliminarNodo(nodo, valor) ukudlulisa impande yesihlahla kanye nenani okumele lisuswe. Umsebenzi eliminarNodo(nodo, valor) yenza ukususwa okuphindaphindiwe, kucatshangelwa amacala ahlukene kuye ngesakhiwo somuthi. Uma i-node yamanje null, ibuyiselwe null. Uma inani eliseshiwe lingaphansi kwenani le-node yamanje, ukususa kwenziwa enganeni engakwesokunxele. Uma isikhulile, yenziwa endodaneni efanele. Uma inodi inazo zombili izingane, kutholwa umlandeli oseduze futhi ukushintshaniswa kwenani kwenziwa ngaphambi kokuba olandelile akhishwe.
Ukusebenza Okuthuthukisiwe Ezihlahleni kanambambili
Ngaphezu kokusebenza okuyisisekelo, izihlahla kanambambili zisekela imisebenzi eminingi ethuthukisiwe engakusiza wenze imisebenzi eyinkimbinkimbi. Le misebenzi ikuvumela ukuthi udabule isihlahla ngezindlela ezihlukene, ubale ubude baso, uhlole ukuthi sinokulingana, nokunye. Sizohlola eminye yale misebenzi ngezansi.
Ukunqamula ngokulandelana kwesihlahla kanambambili
I-Inorder traversal yesihlahla kanambambili ihlanganisa ukuvakashela ama-node ngokulandelana okulandelayo: okokuqala ingane yesokunxele, bese kuba i-node yamanje, futhi ekugcineni ingane efanele. Lolu hlobo lokunqamula luwusizo ekutholeni izakhi zesihlahla ngokulandelana okukhuphukayo. Nasi isibonelo sendlela yokuqalisa ukuwela ngokulandelana kwesihlahla kanambambili:
class ArbolBinario {
// ...
recorridoEnOrden() {
this.recorrerEnOrden(this.raiz);
}
recorrerEnOrden(nodo) {
if (nodo !== null) {
this.recorrerEnOrden(nodo.izquierdo);
console.log(nodo.valor);
this.recorrerEnOrden(nodo.derecho);
}
}
}
Kulesi sibonelo, umsebenzi recorridoEnOrden() icela umsebenzi recorrerEnOrden(nodo) edlulisa impande yesihlahla. Umsebenzi recorrerEnOrden(nodo) yenza ukunqamula okuphindaphindiwe ngokulandelana, iphrinta inani le-node yamanje phakathi kwamakholi kuya kwesobunxele nakwesokudla kuzingane.
Oda kusengaphambili ukuvundla kwesihlahla esinambambili
Uku-oda kusengaphambili ukunqamula kwesihlahla kanambambili kuhilela ukuvakashela amanodi ngokulandelana okulandelayo: okokuqala inodi yamanje, bese kuba ingane yesobunxele, futhi ekugcineni ingane efanele. Lolu hlobo lokuvakasha luwusizo ekudaleni ikhophi yesihlahla noma ukuphrinta ukumelwa okubonakalayo kwaso. Nasi isibonelo sendlela yokuqalisa uku-oda kusengaphambili ukuwela kwesihlahla kanambambili:
class ArbolBinario {
// ...
recorridoPreOrden() {
this.recorrerPreOrden(this.raiz);
}
recorrerPreOrden(nodo) {
if (nodo !== null) {
console.log(nodo.valor);
this.recorrerPreOrden(nodo.izquierdo);
this.recorrerPreOrden(nodo.derecho);
}
}
}
Kulesi sibonelo, umsebenzi recorridoPreOrden() icela umsebenzi recorrerPreOrden(nodo) edlulisa impande yesihlahla. Umsebenzi recorrerPreOrden(nodo) yenza ukunqamula okuphindaphindayo ngoku-oda kwangaphambilini, iphrinta inani lenodi yamanje ngaphambi kokubiza izingane ezingakwesokunxele nezingakwesokudla.
I-postorder traversal yomuthi kanambambili
I-postorder traversal yomuthi kanambambili ihlanganisa ukuvakashela ama-node ngokulandelana okulandelayo: okokuqala ingane yesokunxele, bese kuba ingane efanele, futhi ekugcineni i-node yamanje. Lolu hlobo lokunqamula luwusizo ekukhululeni inkumbulo ehlala esihlahleni noma ekwenzeni imisebenzi encike ezinganeni ngaphambi kokucubungula inodi yamanje. Nasi isibonelo sendlela yokusebenzisa i-postorder traversal yesihlahla kanambambili:
class ArbolBinario {
// ...
recorridoPostOrden() {
this.recorrerPostOrden(this.raiz);
}
recorrerPostOrden(nodo) {
if (nodo !== null) {
this.recorrerPostOrden(nodo.izquierdo);
this.recorrerPostOrden(nodo.derecho);
console.log(nodo.valor);
}
}
}
Kulesi sibonelo, umsebenzi recorridoPostOrden() icela umsebenzi recorrerPostOrden(nodo) edlulisa impande yesihlahla. Umsebenzi recorrerPostOrden(nodo) yenza i-postorder recursive traversal, ibiza izingane kwesokunxele nesokudla kuqala bese iphrinta inani lenodi yamanje.
Izindlela Ezinhle Kakhulu Zokusebenza Nezihlahla Ezinambambili ku-JavaScript
Manje njengoba usunokuqonda okuqinile kokusebenza okuyisisekelo nokuthuthukisiwe ezihlahleni kanambambili ku-JavaScript, kubalulekile ukukhumbula ezinye izinqubo ezingcono kakhulu zokusebenza nazo. Lezi zinqubo zizokusiza ukuthi ubhale ikhodi efundeka kakhudlwana, esebenza kahle futhi egcinekayo:
- Bhala ikhodi yakho kahle:Izihlahla kanambambili zingasheshe zibe yinkimbinkimbi, ngakho-ke kubalulekile ukubhala ikhodi yakho ngokucacile nangokufingqiwe. Chaza injongo yendlela ngayinye, amapharamitha ayo, kanye nenani elilindelekile lokubuyisela. Lokhu kuzokwenza ikhodi ukuthi iqondeke kalula kuwe nakwabanye onjiniyela abangase basebenze kuphrojekthi ngokuzayo.
- Sebenzisa amagama achazayo eziguquguqukayo nezindlela: Khetha amagama abonisa inhloso kanye nomsebenzi wokuguquguquka ngakunye kanye nendlela ekusetshenzisweni kwakho kwesihlahla kanambambili. Lokhu kuzokwenza ikhodi yakho ifundeke kakhudlwana futhi iqondakale, okwenza kube lula ukuyigcina nokuyilungisa.
- Yenza ukuhlola okubanzi: Ngaphambi kokusebenzisa ukusebenzisa kwakho kwesihlahla esimbaxambili kuphrojekthi yangempela, qiniseka ukuthi wenza ukuhlola okuphelele ukuze uqinisekise ukuthi sisebenza ngendlela efanele. Dala izimo zokuhlola ezihlanganisa izimo ezihlukene futhi uqinisekise ukuthi imiphumela injengokulindelekile. Lokhu kuzokusiza ukuthi ubone amaphutha angaba khona futhi uqinisekise ukuthi ukusebenzisa kwakho kuthembekile.
- Cabangela ukusebenza kahle:Izihlahla kanambambili zinganikeza ukusebenza kahle okukhulu ekuguquleni idatha nasekusesheni, kodwa kubalulekile ukucabangela ukusebenza kahle kokusetshenziswa kwakho. Linganisa ukusebenza kwama-algorithms akho futhi ubheke amathuba wokuwathuthukisa uma kudingeka. Isibonelo, ungasebenzisa amasu okulinganisa isihlahla ukuze uqinisekise ukuthi ukuphakama kwesihlahla kuhlala kumazinga amukelekayo.
- Sebenzisa ngokunenzuzo imitapo yolwazi nezinsiza ezikhona: I-JavaScript inezinhlobo eziningi zemitapo yolwazi nezisetshenziswa ezitholakalayo ezingakusiza ukuthi usebenze ngezihlahla kanambambili ngokuphumelelayo. Cwaninga futhi usebenzise imitapo yolwazi efana ne-binarytree noma i-bintrees ukuze uthathe ithuba lokusetshenziswa osekuhloliwe futhi okulungiselelwe. Ukwengeza, thintana nemibhalo esemthethweni ye-JavaScript kanye nezinsiza ezithenjwayo eziku-inthanethi ukuze wandise ulwazi lwakho futhi uxazulule izinselele ezingaba khona.
- Beka amazwana ngekhodi yakho: Ngokungeziwe kumadokhumenti angaphandle, kubalulekile ukwengeza amazwana afanelekile ngaphakathi kwekhodi yakho. Ichaza injongo yezigaba ezithile noma imigqa yekhodi, kanye nama-algorithms noma izindlela ezisetshenzisiwe. Lokhu kuzosiza abanye onjiniyela (kanye nawe ngokuzayo) ukuqonda ngokushesha ukuthi ukusebenzisa kwakho kusebenza kanjani.
Imibuzo ebuzwa njalo
Nayi eminye imibuzo evame ukubuzwa mayelana nezihlahla kanambambili ku-JavaScript:
- Uyini umehluko phakathi kwesihlahla kanambambili kanye nomuthi wokusesha kanambambili? Isihlahla kanambambili siyisakhiwo sedatha esilandelanayo lapho inodi ngayinye ingaba nezingane ezimbili. Umuthi wokusesha kanambambili uwuhlobo oluthile lwesihlahla kanambambili lapho amanani ama-node ahlelwa khona ukuze amanani amancane abe enganeni engakwesokunxele futhi amanani amakhulu kunawo wonke akungane efanele. Lokhu kuvumela ukusesha okuphumelelayo esihlahleni.
- Kufanele usebenzise nini isihlahla kanambambili esikhundleni sezinye izakhiwo zedatha? Kufanele usebenzise isihlahla kanambambili uma udinga isakhiwo sedatha esisebenzayo ukuze uhlele futhi ugcine idatha ngokohlelo. Izihlahla kanambambili ziwusizo ikakhulukazi uma udinga ukwenza ukusesha, ukufaka, nokususa imisebenzi kahle.
- Kungenzeka yini ukulinganisa isihlahla kanambambili ngemuva kokwenza imisebenzi eminingi yokufaka nokususa? Yebo, kungenzeka ukulinganisa isihlahla kanambambili ngemuva kokwenza imisebenzi eminingi yokufaka nokususa. Kunama-algorithms ahlukene okulinganisa, njengesihlahla se-AVL noma isihlahla esimnyama esibomvu, esiqinisekisa ukuthi ukuphakama kwesihlahla kugcinwa kumazinga afanele futhi kuvimbele isihlahla ukuthi singalingani.
- Ingabe izihlahla kanambambili zisetshenziselwa ukugcina idatha yezinombolo kuphela? Cha, izihlahla kanambambili zingasetshenziswa ukugcina noma yiluphi uhlobo lwedatha, hhayi nje idatha yezinombolo. Ungasebenzisa izihlahla kanambambili ezigcina izintambo zombhalo, izinto ezingokwezifiso, noma ezinye izinhlobo zedatha kuye ngezidingo zakho.
- Ingabe ukhona umtapo wezincwadi we-JavaScript ongasebenza ngezihlahla kanambambili? Yebo, kunemitapo yolwazi ye-JavaScript eminingana enikeza ukusebenza okuthuthukile kokusebenza ngezihlahla kanambambili. Eminye yemitapo yolwazi edumile ihlanganisa i-“binarytree”, “bintrees” kanye ne-“d3-binarytree”. Le mitapo yolwazi ikunikeza ukusetshenziswa osekulungele ukusetshenziswa kanye nemisebenzi eyengeziwe yokusebenza ngezihlahla kanambambili.
- Yiziphi izinhlelo ezisebenzayo zezihlahla kanambambili emhlabeni wangempela? Izihlahla kanambambili zisetshenziswa ezinhlelweni ezahlukahlukene zomhlaba wangempela ezifana nedathabheyisi, ama-algorithms okusesha, ama-algorithms wokucindezela, izinhlelo zefayela nokunye okuningi. Zibalulekile ekuhleleni ngempumelelo nasekusesheni idatha kuwo wonke amasistimu nezinhlelo zokusebenza eziningi.
Isiphetho
Izihlahla kanambambili ku-JavaScript iyithuluzi elinamandla lokuhlela kanye nokukhohlisa idatha kahle. Kulesi sihloko, ufunde okuyisisekelo kwezihlahla kanambambili, ukuthi ungazisebenzisa kanjani ku-JavaScript, kanye nemisebenzi eyisisekelo nethuthukisiwe ongayenza kuzo. Futhi, sihlole imikhuba ethile ehamba phambili futhi saphendula imibuzo evame ukubuzwa ukuze sikusize wandise ulwazi lwakho.
Manje njengoba usunokuqonda okuqinile kwezihlahla kanambambili ku-JavaScript, sekuyisikhathi sokusebenzisa lolu lwazi kumaphrojekthi akho futhi uhlole amathuba anikezwa yilesi sakhiwo sedatha. Nweba amakhono akho wokuhlela bese uyisa ikhodi yakho ezingeni elilandelayo ngezihlahla kanambambili ku-JavaScript!