చర్చించబడిన భావనల దృశ్యమాన ప్రాతినిధ్యం క్రింది చిత్రంలో చూపబడింది:
ఈ గైడ్ క్రింద పేర్కొన్న విభాగాలను కవర్ చేయడం ద్వారా బైనరీ చెట్టు యొక్క అన్ని లీఫ్ నోడ్లను ముద్రించే ప్రక్రియను వివరిస్తుంది:
- లీఫ్ నోడ్స్ను ఎలా గుర్తించాలి?
- జావాస్క్రిప్ట్లో బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ఎడమ నుండి కుడికి ఎలా ముద్రించాలి?
- బోనస్ చిట్కా: బైనరీ ట్రీ యొక్క లీఫ్ నోడ్లను కుడి నుండి ఎడమ వైపుకు ముద్రించడం
- ముగింపు
లీఫ్ నోడ్స్ను ఎలా గుర్తించాలి?
ది ' ఆకు 'నోడ్లు చైల్డ్ నోడ్లు లేనివి లేదా నిర్దిష్టంగా చెప్పాలంటే' ఎత్తు 'యొక్క' 0 ”. నోడ్ ఒక 'ని కలిగి ఉంటే ఎత్తు ' అంతకన్నా ఎక్కువ ' 0 ” అప్పుడు ఆ నోడ్ లోపలి నోడ్ లేదా రూట్ నోడ్ కావచ్చు. ది ' ఆకు ” నోడ్లు సాధారణంగా ఈ నోడ్ ఉత్పత్తి చేయబడిన అసలు మూలాన్ని గుర్తించడానికి బ్యాక్ట్రాక్ చేయబడతాయి. లోపం లేదా సమస్య యొక్క కారణాన్ని కనుగొనడానికి ఇది ఎక్కువగా శోధన లేదా లోపం కనుగొనే అల్గారిథమ్లలో ఉపయోగించబడుతుంది.
జావాస్క్రిప్ట్లో బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ఎడమ నుండి కుడికి ఎలా ముద్రించాలి?
రెండు విధానాలు ఉన్నాయి' పునరావృత 'మరియు' పునరావృతం 'అందించిన బైనరీ ట్రీలో అందుబాటులో ఉన్న అన్ని లీఫ్ నోడ్లను ఎంచుకోవడానికి కావలసిన' వదిలేశారు ' నుండి ' కుడి ” దిశ. ఈ విధానాల యొక్క ఆచరణాత్మక అమలు క్రింది పేర్కొన్న విభాగాలలో ప్రదర్శించబడింది:
- బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ఎడమ నుండి కుడికి పునరావృతంగా ముద్రించండి
- పునరావృత విధానాన్ని ఉపయోగించి బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ముద్రించండి
విధానం 1: బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ఎడమ నుండి కుడికి పునరావృతంగా ప్రింట్ చేయండి
పునరావృత విధానం a లోని అన్ని నోడ్లను ఎంచుకుంటుంది లోతు-మొదటి శోధన అల్గోరిథం మొదట మొత్తం ఎడమ వైపు నోడ్లను తర్వాత మధ్య నోడ్ మరియు చివరికి కుడి వైపు నోడ్లను దాటే పద్ధతి. ఈ ఆపరేషన్ ప్రతి నోడ్ కోసం పునరావృతమవుతుంది మరియు ' ఆకు 'నోడ్లు గుర్తించబడతాయి. ఈ భావనను బాగా అర్థం చేసుకోవడానికి, దిగువ కోడ్ స్నిప్పెట్ని సందర్శించండి:
తరగతి నోడ్{
నిర్మాణకర్త ( )
{
ఇది . విషయము = 0 ;
ఇది . వదిలేశారు = శూన్య ;
ఇది . కుడి = శూన్య ;
}
} ;
అక్కడ డిస్ప్లే లీఫ్ నోడ్స్ = ( రూట్ నోడ్ ) =>
{
ఉంటే ( రూట్ నోడ్ == శూన్య )
తిరిగి ;
ఉంటే ( రూట్ నోడ్. వదిలేశారు == శూన్య && రూట్ నోడ్. కుడి == శూన్య )
{
పత్రం. వ్రాయడానికి ( రూట్ నోడ్. విషయము + '' ) ;
తిరిగి ;
}
ఉంటే ( రూట్ నోడ్. వదిలేశారు != శూన్య )
ప్రదర్శన LeafNodes ( రూట్ నోడ్. వదిలేశారు ) ;
ఉంటే ( రూట్ నోడ్. కుడి != శూన్య )
ప్రదర్శన LeafNodes ( రూట్ నోడ్. కుడి ) ;
}
నమూనా నోడ్ = ( విలువ ) =>
{
టెంప్నోడ్గా ఉంది = కొత్త నోడ్ ( ) ;
టెంప్నోడ్. విషయము = విలువ ;
టెంప్నోడ్. వదిలేశారు = శూన్య ;
టెంప్నోడ్. కుడి = శూన్య ;
తిరిగి టెంప్నోడ్ ;
}
రూట్నోడ్గా ఉంది = provNode ( 3 ) ;
రూట్ నోడ్. వదిలేశారు = provNode ( 6 ) ;
రూట్ నోడ్. కుడి = provNode ( 9 ) ;
రూట్ నోడ్. వదిలేశారు . వదిలేశారు = provNode ( 12 ) ;
రూట్ నోడ్. వదిలేశారు . కుడి = provNode ( పదిహేను ) ;
రూట్ నోడ్. వదిలేశారు . కుడి . కుడి = provNode ( 24 ) ;
రూట్ నోడ్. కుడి . వదిలేశారు = provNode ( 18 ) ;
రూట్ నోడ్. కుడి . కుడి = provNode ( ఇరవై ఒకటి ) ;
ప్రదర్శన LeafNodes ( రూట్ నోడ్ ) ;
పై కోడ్ బ్లాక్ యొక్క వివరణ క్రింద పేర్కొనబడింది:
- ముందుగా, '' పేరుతో తరగతిని సృష్టించండి నోడ్ ”, అది కొత్త నోడ్ని సృష్టిస్తుంది మరియు దాని విలువను “కి సెట్ చేస్తుంది 0 ”. జతచేయబడ్డ ' వదిలేశారు 'మరియు' కుడి “సైడ్ నోడ్లు సెట్ చేయబడ్డాయి” శూన్య ”డిఫాల్ట్గా క్లాస్ కన్స్ట్రక్టర్ని ఉపయోగిస్తుంది.
- తరువాత, ఒక 'ని నిర్వచించండి డిస్ప్లే లీఫ్ నోడ్స్() 'ఫంక్షన్' యొక్క ఒకే పరామితిని అంగీకరిస్తుంది రూట్ నోడ్ ”. ఈ పారామెట్రిక్ విలువ బైనరీ ట్రీ యొక్క ప్రస్తుతం ఎంచుకున్న నోడ్గా పరిగణించబడుతుంది.
- ఫంక్షన్ లోపల, ' ఉంటే 'స్టేట్మెంట్ అనేది తనిఖీ చేయడానికి ఉపయోగించబడుతుంది' రూట్ నోడ్ ” శూన్యం లేదా కాదు. ఆ సందర్భం లో ' శూన్య ” ఆ నోడ్ కోసం తదుపరి అమలు ఆగిపోయింది. మరొక సందర్భంలో, రూట్నోడ్ ' వదిలేశారు 'మరియు' కుడి 'సైడ్ నోడ్స్' కోసం తనిఖీ చేయబడ్డాయి శూన్య ”. రెండూ శూన్యంగా ఉంటే, దాని విలువ ' నోడ్ ” అని ముద్రించబడుతుంది.
- ఒకవేళ ' వదిలేశారు 'లేదా' కుడి ” నోడ్ “శూన్యం” కాదు, ఆపై నోడ్ యొక్క ఆ వైపుకు “ డిస్ప్లే లీఫ్ నోడ్స్() రికర్సివ్ ఆపరేషన్ కోసం ” ఫంక్షన్.
- ' అనే కొత్త ఫంక్షన్ను నిర్వచించండి provNode() 'ఇది' యొక్క ఒకే పరామితిని అంగీకరిస్తుంది విలువ ”. ఫంక్షన్ లోపల '' యొక్క కొత్త ఉదాహరణను సృష్టించండి నోడ్ 'తరగతి పేరు' టెంప్నోడ్ ”. పారామెట్రిక్ కేటాయించండి ' విలువ 'తరగతి ఆస్తికి విలువగా' విషయము 'మరియు' సెట్ చేయండి వదిలేశారు 'మరియు' కుడి 'సైడ్ నోడ్స్' కు శూన్య ” డిఫాల్ట్గా.
- చివరగా, '' పేరుతో ఒక వస్తువును సృష్టించండి రూట్ నోడ్ ' కొరకు ' provNode() ” ఫంక్షన్ మరియు నోడ్ విలువను ఈ ఫంక్షన్ పరామితిగా పాస్ చేయండి. 'ని జోడించడం ద్వారా ఎడమ మరియు కుడి వైపు నోడ్లను సృష్టించండి వదిలేశారు 'మరియు' కుడి 'రూట్నోడ్'తో కీలకపదాలు మరియు అదే ఫంక్షన్ని ఉపయోగించి వాటికి విలువను కేటాయించండి provNode() ”.
- ది ' వదిలేశారు ” అంటే రూట్ నోడ్ యొక్క ఎడమ స్థానం మరియు “ ఎడమ.ఎడమ 'స్థానం అంటే ఎడమ నుండి ఎడమకు అదే విధానం వర్తించబడుతుంది' కుడి 'మరియు' కుడి ”
- చెట్టును నిర్వచించిన తర్వాత, 'రూట్నోడ్'ని '' కోసం ఆర్గ్యుమెంట్గా పాస్ చేయండి డిస్ప్లే లీడ్ నోడ్స్() ” సృష్టించిన చెట్టు యొక్క అన్ని లీఫ్ నోడ్లను ఎంచుకుని, ప్రింట్ చేయడానికి ఫంక్షన్.
కంపైలేషన్ తర్వాత ఉత్పత్తి చేయబడిన అవుట్పుట్ అందించిన చెట్టు యొక్క లీఫ్ నోడ్ తిరిగి పొందబడిందని మరియు కన్సోల్పై ముద్రించబడిందని నిర్ధారిస్తుంది:
విధానం 2: పునరావృత విధానాన్ని ఉపయోగించి బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ప్రింట్ చేయండి
ది ' పునరావృతం 'విధానం అత్యంత సమర్థవంతమైన విధానం, ఇది ' అనే భావనను ఉపయోగిస్తుంది పుష్ 'మరియు' పాప్ 'ఎంచుకోవడానికి' ఆకు ” నోడ్స్. ఈ విధానం యొక్క ముఖ్య అంశాలు లేదా పని క్రింది విధంగా పేర్కొనబడ్డాయి:
తరగతి నోడ్{
నిర్మాణకర్త ( విలువ )
{
ఇది . సమాచారం = విలువ ;
ఇది . వదిలేశారు = శూన్య ;
ఇది . కుడి = శూన్య ;
}
} ;
అక్కడ డిస్ప్లే లీఫ్ నోడ్స్ = ( రూట్ నోడ్ ) =>
{
ఉంటే ( ! రూట్ నోడ్ )
తిరిగి ;
జాబితా చేయనివ్వండి = [ ] ;
జాబితా. పుష్ ( రూట్ నోడ్ ) ;
అయితే ( జాబితా. పొడవు > 0 ) {
రూట్ నోడ్ = జాబితా [ జాబితా. పొడవు - 1 ] ;
జాబితా. పాప్ ( ) ;
ఉంటే ( ! రూట్ నోడ్. వదిలేశారు && ! రూట్ నోడ్. కుడి )
పత్రం. వ్రాయడానికి ( రూట్ నోడ్. సమాచారం + '' ) ;
ఉంటే ( రూట్ నోడ్. కుడి )
జాబితా. పుష్ ( రూట్ నోడ్. కుడి ) ;
ఉంటే ( రూట్ నోడ్. వదిలేశారు )
జాబితా. పుష్ ( రూట్ నోడ్. వదిలేశారు ) ;
}
}
రూట్నోడ్గా ఉంది = కొత్త నోడ్ ( 3 ) ;
రూట్ నోడ్. వదిలేశారు = కొత్త నోడ్ ( 6 ) ;
రూట్ నోడ్. కుడి = కొత్త నోడ్ ( 9 ) ;
రూట్ నోడ్. వదిలేశారు . వదిలేశారు = కొత్త నోడ్ ( 12 ) ;
రూట్ నోడ్. వదిలేశారు . కుడి = కొత్త నోడ్ ( పదిహేను ) ;
రూట్ నోడ్. వదిలేశారు . కుడి . కుడి = కొత్త నోడ్ ( 24 ) ;
రూట్ నోడ్. కుడి . వదిలేశారు = కొత్త నోడ్ ( 18 ) ;
రూట్ నోడ్. కుడి . కుడి = కొత్త నోడ్ ( ఇరవై ఒకటి ) ;
ప్రదర్శన LeafNodes ( రూట్ నోడ్ ) ;
పై కోడ్ యొక్క వివరణ క్రింద వ్రాయబడింది:
- ముందుగా, ఒక 'ని సృష్టించండి నోడ్ 'ఒకే పరామితిని పొందే తరగతి' విలువ ” ఇది కొత్తగా సృష్టించబడిన నోడ్ యొక్క విలువగా సెట్ చేయబడింది మరియు ఎడమ మరియు కుడి భుజాలు శూన్యంగా సెట్ చేయబడతాయి. పై ఉదాహరణలో చేసినట్లుగానే.
- తరువాత, ఒక ఫంక్షన్ను సృష్టించండి ' డిస్ప్లే లీఫ్ నోడ్స్() 'అది ఒకే పరామితిని అంగీకరిస్తుంది' రూట్ నోడ్ ”. ఈ 'రూట్నోడ్' బైనరీ ట్రీగా పరిగణించబడుతుంది మరియు దాని శూన్యత మొదట తనిఖీ చేయబడుతుంది.
- నోడ్ ఖాళీగా లేకుంటే, '' అనే ఖాళీ జాబితా జాబితా ' సృష్టించబడింది మరియు ' రూట్ నోడ్ 'పరామితి దానిలో 'ని ఉపయోగించి చొప్పించబడింది పుష్() ” పద్ధతి.
- అప్పుడు, ' అయితే () 'నిడివి వరకు అమలు చేసే ' ఉపయోగించబడుతుంది జాబితా ”. లూప్ లోపల, చెట్టు దిగువన ఉండే మూలకం లేదా ' జాబితా ''ని ఉపయోగించి తీసివేయబడుతుంది పాప్() ” పద్ధతి.
- ఇప్పుడు, ' యొక్క ఉనికి వదిలేశారు 'మరియు' కుడి ”రూట్నోడ్” వైపులా తనిఖీ చేయబడింది మరియు రెండు వైపులా ఉనికిలో లేకుంటే దానికి చైల్డ్ నోడ్ లేదని అర్థం. అప్పుడు, ఈ నోడ్ స్క్రీన్పై ప్రదర్శించబడుతుంది మరియు లీఫ్ నోడ్గా గుర్తించబడుతుంది.
- ఎడమ లేదా కుడి వైపున ఒక నోడ్ ఉంటే అది పిల్లలను కలిగి ఉంటుంది. అప్పుడు ఆ ' వదిలేశారు 'మరియు' కుడి 'నోడ్' లోకి నెట్టబడుతుంది జాబితా ” ఆకు నోడ్ను కనుగొనే తదుపరి ఆపరేషన్ కోసం.
- ముగింపులో, నోడ్ విలువలను పారామితులుగా పాస్ చేయడం ద్వారా అనుకూల బైనరీ ట్రీని సృష్టించండి ' నోడ్ 'తరగతి కన్స్ట్రక్టర్. సృష్టించిన తర్వాత, 'రూట్నోడ్' అనే చెట్టును '' కోసం ఆర్గ్యుమెంట్గా పాస్ చేయండి డిస్ప్లే లీఫ్ నోడ్స్() ” ఫంక్షన్.
సంకలనం తర్వాత ఉత్పత్తి చేయబడిన అవుట్పుట్ అందించిన చెట్టు యొక్క ఆకు నోడ్లు ముద్రించబడిందని చూపిస్తుంది:
బోనస్ చిట్కా: బైనరీ ట్రీ యొక్క లీఫ్ నోడ్లను కుడి నుండి ఎడమ వైపుకు ముద్రించడం
చైల్డ్ నోడ్లు లేని అన్ని లీఫ్ నోడ్లను తిరిగి పొందడానికి “ కుడి ' నుండి ' వదిలేశారు ” దిశలో, దాని సౌలభ్యం కారణంగా పునరావృత విధానం చాలా సిఫార్సు చేయబడింది. ఉదాహరణకు, పై విభాగాలలో చర్చించిన అదే చెట్టు ఆకు నోడ్ను తిరిగి పొందడానికి ఉపయోగించబడుతుంది కానీ “ కుడి ' కు ' వదిలేశారు 'దిశ, క్రింద చూపిన విధంగా:
తరగతి నోడ్{
నిర్మాణకర్త ( విలువ )
{
ఇది . సమాచారం = విలువ ;
ఇది . వదిలేశారు = శూన్య ;
ఇది . కుడి = శూన్య ;
}
} ;
ఫంక్షన్ డిస్ప్లే లీఫ్ నోడ్స్ ( రూట్ )
{
ఉంటే ( రూట్ == శూన్య )
{
తిరిగి ;
}
ఉంటే ( రూట్. వదిలేశారు == శూన్య && రూట్. కుడి == శూన్య )
{
పత్రం. వ్రాయడానికి ( రూట్. సమాచారం + '' ) ;
తిరిగి ;
}
ఉంటే ( రూట్. కుడి != శూన్య )
{
డిస్ప్లే లీఫ్ నోడ్స్ ( రూట్. కుడి ) ;
}
ఉంటే ( రూట్. వదిలేశారు != శూన్య )
{
డిస్ప్లే లీఫ్ నోడ్స్ ( రూట్. వదిలేశారు ) ;
}
}
రూట్నోడ్గా ఉంది = కొత్త నోడ్ ( 3 ) ;
రూట్ నోడ్. వదిలేశారు = కొత్త నోడ్ ( 6 ) ;
రూట్ నోడ్. కుడి = కొత్త నోడ్ ( 9 ) ;
రూట్ నోడ్. వదిలేశారు . వదిలేశారు = కొత్త నోడ్ ( 12 ) ;
రూట్ నోడ్. వదిలేశారు . కుడి = కొత్త నోడ్ ( పదిహేను ) ;
రూట్ నోడ్. వదిలేశారు . కుడి . కుడి = కొత్త నోడ్ ( 24 ) ;
రూట్ నోడ్. కుడి . వదిలేశారు = కొత్త నోడ్ ( 18 ) ;
రూట్ నోడ్. కుడి . కుడి = కొత్త నోడ్ ( ఇరవై ఒకటి ) ;
ప్రదర్శన LeafNodes ( రూట్ నోడ్ ) ;
పైన పేర్కొన్న కోడ్ ఇలా పనిచేస్తుంది:
- మొదట, తరగతి ' నోడ్ ” అనేది ట్రీలో కొత్త నోడ్ని జోడించడానికి డిఫాల్ట్ కన్స్ట్రక్టర్ని ఉపయోగించే పై ఉదాహరణలలో చేసిన లింక్ను మాత్రమే ఉపయోగించుకుంటుంది.
- తరువాత, ' డిస్ప్లే లీడ్ నోడ్స్() 'ఫంక్షన్ సృష్టించబడింది, ఇది' యొక్క ఒకే పరామితిని అంగీకరిస్తుంది రూట్ నోడ్ ”. ఈ పరామితి ' కోసం తనిఖీ చేయబడింది శూన్య 'ద్వారా పరిస్థితి' ఉంటే ' ప్రకటన.
- అందించిన నోడ్ నిజం కాకపోతే, దాని “ వదిలేశారు 'మరియు' కుడి 'సైడ్ నోడ్స్' కోసం తనిఖీ చేయబడ్డాయి శూన్య 'పరిస్థితి. రెండూ శూన్యమైతే, నోడ్ ''గా గుర్తించబడుతుంది ఆకు ” నోడ్ మరియు వెబ్పేజీలో ముద్రించబడింది.
- ఆ తర్వాత, పాస్ చేయండి ' కుడి 'మరియు' వదిలేశారు '' యొక్క నోడ్స్ రూట్ నోడ్ ' కు ' డిస్ప్లే లీఫ్ నోడ్స్() ” ఫంక్షన్.
- 'ని ఉపయోగించి సందర్భాలను సృష్టించడం ద్వారా ప్రతి నోడ్ యొక్క స్థానాన్ని కేటాయించండి కొత్త 'కీవర్డ్ మరియు' నోడ్() ” కన్స్ట్రక్టర్ మరియు కన్స్ట్రక్టర్ పారామీటర్గా స్థానాన్ని పేర్కొనడం.
- ది ' వదిలేశారు ” అంటే రూట్ నోడ్ యొక్క ఎడమ స్థానం మరియు “ ఎడమ.ఎడమ ” స్థానం అంటే ఎడమ లేదా ఎడమ. '' విషయంలో కూడా అదే విధానం వర్తించబడుతుంది. కుడి 'మరియు' కుడి ”.
- చివరగా, పాస్ చేయండి ' రూట్ నోడ్ '' కోసం వాదనగా డిస్ప్లే లీఫ్ నోడ్() ” ఫంక్షన్.
ఉత్పత్తి చేయబడిన అవుట్పుట్ ఆకు నోడ్లు కుడి-నుండి-ఎడమ దిశలో ముద్రించబడిందని చూపిస్తుంది.
బైనరీ చెట్టు యొక్క అన్ని ఆకు నోడ్లను ఏదైనా కావలసిన దిశలో ముద్రించడం గురించి అంతే.
ముగింపు
బైనరీ ట్రీ యొక్క అన్ని లీఫ్ నోడ్లను ప్రింట్ చేయడానికి, ట్రీ నోడ్లకు విలువలను సృష్టించే మరియు కేటాయించే యాదృచ్ఛిక తరగతిని సృష్టించండి. తరువాత, పై నుండి క్రిందికి సోపానక్రమంలో చెట్టు యొక్క ఒకే నోడ్ని అంగీకరించే యాదృచ్ఛిక ఫంక్షన్ను సృష్టించండి. ఈ ఫంక్షన్ బహుళ 'ని కలిగి ఉంటుంది ఉంటే ' ఉంటే తనిఖీ చేసే పరిస్థితులు ' నోడ్ 'ఖాళీగా లేదు మరియు దానికి నోడ్లు లేవు' వదిలేశారు 'మరియు' కుడి 'దిశ, అప్పుడు ఆ నోడ్ ఒక' గా పరిగణించబడుతుంది ఆకు ” నోడ్ మరియు కన్సోల్లో ప్రదర్శించబడుతుంది. ఈ గైడ్ బైనరీ చెట్టు యొక్క అన్ని లీఫ్ నోడ్లను ఎడమ నుండి కుడికి లేదా కుడి నుండి ఎడమ వైపుకు ముద్రించే విధానాన్ని వివరించింది.