ஒரு பைனரி மரத்தின் அனைத்து இலை முனைகளையும் ஜாவாஸ்கிரிப்ட்டில் இடமிருந்து வலமாக அச்சிடுவது எப்படி?

Oru Painari Marattin Anaittu Ilai Munaikalaiyum Javaskiripttil Itamiruntu Valamaka Accituvatu Eppati



ஒரு பைனரி மரம் செங்குத்துகள் வழியாக இணைக்கப்பட்ட பல முனைகளைக் கொண்டுள்ளது, ஒவ்வொரு முனையும் அதன் குழந்தை முனைகள் எனப்படும் அதிகபட்சம் இரண்டு குழந்தை முனைகளுடன் இணைக்கப்படலாம். என்றால் ' முனை 'பேரன்ட் நோட் இல்லை ஆனால் பேரக்குழந்தை முனைகளைக் கொண்ட சில சைல்டு நோட்கள் உள்ளன, பின்னர் அது ' வேர் ” முனை. முனை ஒரு ' உள் ” முனையில் பெற்றோர் முனை மற்றும் குழந்தை முனை இருந்தால். ' இலை ” முனைக்கு பெற்றோர் முனை உள்ளது ஆனால் சைல்டு நோட் இல்லை என்பது முட்டுச்சந்தில் இருக்கும் முனைகள்.

விவாதிக்கப்பட்ட கருத்துகளின் காட்சி பிரதிநிதித்துவம் கீழே உள்ள படத்தில் காட்டப்பட்டுள்ளது:







இந்த வழிகாட்டி கீழே குறிப்பிடப்பட்டுள்ள பிரிவுகளை உள்ளடக்கியதன் மூலம் பைனரி மரத்தின் அனைத்து இலை முனைகளையும் அச்சிடுவதற்கான செயல்முறையை விளக்குகிறது:



இலை முனைகளை எவ்வாறு கண்டறிவது?

' இலை 'முனைகள் என்பது குழந்தை முனைகள் இல்லாதவை அல்லது குறிப்பிட்டதாக இருக்க வேண்டும்' உயரம் 'இன்' 0 ”. முனையில் ' உயரம் 'விட பெரியது' 0 ” பிறகு அந்த கணு உள் முனை அல்லது ரூட் முனையாக இருக்கலாம். ' இலை ” இந்த முனை உருவாக்கப்படும் மூலத்தை அடையாளம் காண முனைகள் பொதுவாக பின்வாங்கப்படுகின்றன. பிழை அல்லது சிக்கலின் காரணத்தைக் கண்டறிய இது பெரும்பாலும் தேடல் அல்லது பிழை-கண்டுபிடிப்பு அல்காரிதங்களில் பயன்படுத்தப்படுகிறது.



ஒரு பைனரி மரத்தின் அனைத்து இலை முனைகளையும் ஜாவாஸ்கிரிப்ட்டில் இடமிருந்து வலமாக அச்சிடுவது எப்படி?

இரண்டு அணுகுமுறைகள் உள்ளன' சுழல்நிலை 'மற்றும்' மீண்டும் மீண்டும் 'விருப்பப்பட்ட பைனரி மரத்தில் கிடைக்கும் அனைத்து இலை முனைகளையும் தேர்ந்தெடுக்க வேண்டும்' விட்டு ” முதல் ” சரி ' திசையில். இந்த அணுகுமுறைகளின் நடைமுறைச் செயலாக்கம் கீழே கூறப்பட்ட பிரிவுகளில் நிரூபிக்கப்பட்டுள்ளது:





முறை 1: ஒரு பைனரி மரத்தின் அனைத்து இலை முனைகளையும் இடமிருந்து வலமாக மீண்டும் மீண்டும் அச்சிடுக

சுழல்நிலை அணுகுமுறை a இல் உள்ள அனைத்து முனைகளையும் தேர்ந்தெடுக்கிறது ஆழம்-முதல் தேடல் அல்காரிதம் முதலில் முழு இடது பக்க முனைகளையும் பின்னர் நடுத்தர முனையையும் இறுதியில் வலது பக்க முனைகளையும் கடந்து செல்லும் முறை. இந்தச் செயல்பாடு ஒவ்வொரு முனைக்கும் மீண்டும் மீண்டும் மேற்கொள்ளப்படுகிறது, மேலும் ' இலை 'முனைகள் அடையாளம் காணப்படுகின்றன. இந்த கருத்தை நன்கு புரிந்து கொள்ள, கீழே உள்ள குறியீடு துணுக்கைப் பார்வையிடவும்:

வர்க்கம் முனை
{
கட்டமைப்பாளர் ( )
{
இது . உள்ளடக்கம் = 0 ;
இது . விட்டு = ஏதுமில்லை ;
இது . சரி = ஏதுமில்லை ;
}
} ;

அங்கு காட்சி இலை முனைகள் = ( ரூட்நோட் ) =>
{
என்றால் ( ரூட்நோட் == ஏதுமில்லை )
திரும்ப ;

என்றால் ( ரூட்நோட். விட்டு == ஏதுமில்லை && ரூட்நோட். சரி == ஏதுமில்லை )
{
ஆவணம். எழுது ( ரூட்நோட். உள்ளடக்கம் + '' ) ;
திரும்ப ;
}

என்றால் ( ரூட்நோட். விட்டு != ஏதுமில்லை )
காட்சி இலை முனைகள் ( ரூட்நோட். விட்டு ) ;
என்றால் ( ரூட்நோட். சரி != ஏதுமில்லை )
காட்சி இலை முனைகள் ( ரூட்நோட். சரி ) ;
}
மாதிரி முனை இருந்தது = ( மதிப்பு ) =>
{
tempNode இருந்தது = புதிய முனை ( ) ;
தற்காலிக முனை. உள்ளடக்கம் = மதிப்பு ;
தற்காலிக முனை. விட்டு = ஏதுமில்லை ;
தற்காலிக முனை. சரி = ஏதுமில்லை ;
திரும்ப தற்காலிக முனை ;
}
ரூட்நோடாக இருந்தது = provNode ( 3 ) ;
ரூட்நோட். விட்டு = provNode ( 6 ) ;
ரூட்நோட். சரி = provNode ( 9 ) ;
ரூட்நோட். விட்டு . விட்டு = provNode ( 12 ) ;
ரூட்நோட். விட்டு . சரி = provNode ( பதினைந்து ) ;
ரூட்நோட். விட்டு . சரி . சரி = provNode ( 24 ) ;
ரூட்நோட். சரி . விட்டு = provNode ( 18 ) ;
ரூட்நோட். சரி . சரி = provNode ( இருபத்து ஒன்று ) ;

காட்சி இலை முனைகள் ( ரூட்நோட் ) ;

மேலே உள்ள குறியீடு தொகுதியின் விளக்கம் கீழே கூறப்பட்டுள்ளது:



  • முதலில், '' என்ற வகுப்பை உருவாக்கவும் முனை ', இது ஒரு புதிய முனையை உருவாக்கி அதன் மதிப்பை அமைக்கிறது ' 0 ”. இணைக்கப்பட்டுள்ள ' விட்டு 'மற்றும்' சரி பக்க முனைகள் அமைக்கப்பட்டுள்ளன ஏதுமில்லை ” முன்னிருப்பாக கிளாஸ் கன்ஸ்ட்ரக்டரைப் பயன்படுத்தி.
  • அடுத்து, ஒரு 'ஐ வரையறுக்கவும் DisplayLeafNodes() '' என்ற ஒற்றை அளவுருவை ஏற்கும் செயல்பாடு ரூட்நோட் ”. இந்த அளவுரு மதிப்பு பைனரி மரத்தின் தற்போது தேர்ந்தெடுக்கப்பட்ட முனையாகக் கருதப்படுகிறது.
  • செயல்பாட்டின் உள்ளே, ' என்றால் என்பதை சரிபார்க்க ' அறிக்கை பயன்படுத்தப்படுகிறது ' ரூட்நோட் ” என்பது பூஜ்யமா இல்லையா. வழக்கில் ' ஏதுமில்லை ” அந்த முனைக்கு மேலும் செயல்படுத்தல் நிறுத்தப்பட்டது. மற்றொரு வழக்கில், ரூட்நோட் ' விட்டு 'மற்றும்' சரி 'பக்க முனைகள் சரிபார்க்கப்படுகின்றன' ஏதுமில்லை ”. இரண்டும் பூஜ்யமாக இருந்தால், அதன் மதிப்பு ' முனை ” என்று அச்சிடப்படுகிறது.
  • என்றால் ' விட்டு ' அல்லது ' சரி ” முனை “பூஜ்யமானது” அல்ல, பின்னர் முனையின் அந்தப் பக்கத்தை “ DisplayLeafNodes() ” சுழல்நிலை செயல்பாட்டிற்கான செயல்பாடு.
  • பெயரிடப்பட்ட புதிய செயல்பாட்டை வரையறுக்கவும் provNode() 'இது' என்ற ஒற்றை அளவுருவை ஏற்றுக்கொள்கிறது மதிப்பு ”. செயல்பாட்டின் உள்ளே '' இன் புதிய நிகழ்வை உருவாக்கவும். முனை 'வகுப்பு பெயர்' தற்காலிக முனை ”. அளவுருவை ஒதுக்கவும் ' மதிப்பு 'வகுப்புச் சொத்துக்கான மதிப்பாக' உள்ளடக்கம் 'மற்றும்' அமைக்கவும் விட்டு 'மற்றும்' சரி 'பக்க முனைகள்' ஏதுமில்லை ” முன்னிருப்பாக.
  • இறுதியாக, ஒரு பொருளை உருவாக்கவும் '' ரூட்நோட் ' அதற்காக ' provNode() ” செயல்பாடு மற்றும் முனை மதிப்பை இந்த செயல்பாட்டு அளவுருவாக அனுப்பவும். '' ஐச் சேர்ப்பதன் மூலம் இடது மற்றும் வலது பக்க முனைகளை உருவாக்கவும் விட்டு 'மற்றும்' சரி 'ரூட்நோட்' உடன் முக்கிய வார்த்தைகள் மற்றும் அதே செயல்பாட்டைப் பயன்படுத்தி அவற்றின் மதிப்பை ஒதுக்கவும் provNode() ”.
  • ' விட்டு ” என்பது மூல முனையின் இடது நிலை மற்றும் “ விட்டு.இடது 'நிலை என்பது இடதுபுறத்தில் இடதுபுறம் உள்ளது' என்ற விஷயத்தில் அதே அணுகுமுறை பயன்படுத்தப்படுகிறது சரி 'மற்றும்' சரி
  • மரத்தை வரையறுத்த பிறகு, 'ரூட்நோட்' ஐ ஒரு வாதமாக அனுப்பவும் டிஸ்ப்ளே லீட்நோட்ஸ்() ' உருவாக்கப்பட்ட மரத்தின் அனைத்து இலை முனைகளையும் தேர்ந்தெடுத்து அச்சிடுவதற்கான செயல்பாடு.

தொகுத்த பிறகு உருவாக்கப்பட்ட வெளியீடு, வழங்கப்பட்ட மரத்தின் இலை முனை மீட்டெடுக்கப்பட்டு கன்சோலில் அச்சிடப்பட்டதை உறுதிப்படுத்துகிறது:

முறை 2: பைனரி மரத்தின் அனைத்து இலை முனைகளையும் மறு செய்கை அணுகுமுறையைப் பயன்படுத்தி அச்சிடவும்

' மீண்டும் மீண்டும் 'அணுகுமுறை மிகவும் திறமையான அணுகுமுறையாகும், இது' என்ற கருத்தைப் பயன்படுத்துகிறது தள்ளு 'மற்றும்' பாப் 'தேர்வு செய்ய' இலை ” முனைகள். இந்த அணுகுமுறையின் முக்கிய புள்ளிகள் அல்லது செயல்பாடுகள் கீழே குறிப்பிடப்பட்டுள்ளன:

வர்க்கம் முனை
{
கட்டமைப்பாளர் ( மதிப்பு )
{
இது . தகவல்கள் = மதிப்பு ;
இது . விட்டு = ஏதுமில்லை ;
இது . சரி = ஏதுமில்லை ;
}
} ;

அங்கு காட்சி இலை முனைகள் = ( ரூட்நோட் ) =>
{
என்றால் ( ! ரூட்நோட் )
திரும்ப ;
பட்டியலிடலாம் = [ ] ;
பட்டியல். தள்ளு ( ரூட்நோட் ) ;

போது ( பட்டியல். நீளம் > 0 ) {
ரூட்நோட் = பட்டியல் [ பட்டியல். நீளம் - 1 ] ;
பட்டியல். பாப் ( ) ;
என்றால் ( ! ரூட்நோட். விட்டு && ! ரூட்நோட். சரி )
ஆவணம். எழுது ( ரூட்நோட். தகவல்கள் + '' ) ;
என்றால் ( ரூட்நோட். சரி )
பட்டியல். தள்ளு ( ரூட்நோட். சரி ) ;
என்றால் ( ரூட்நோட். விட்டு )
பட்டியல். தள்ளு ( ரூட்நோட். விட்டு ) ;
}
}

ரூட்நோடாக இருந்தது = புதிய முனை ( 3 ) ;
ரூட்நோட். விட்டு = புதிய முனை ( 6 ) ;
ரூட்நோட். சரி = புதிய முனை ( 9 ) ;
ரூட்நோட். விட்டு . விட்டு = புதிய முனை ( 12 ) ;
ரூட்நோட். விட்டு . சரி = புதிய முனை ( பதினைந்து ) ;
ரூட்நோட். விட்டு . சரி . சரி = புதிய முனை ( 24 ) ;
ரூட்நோட். சரி . விட்டு = புதிய முனை ( 18 ) ;
ரூட்நோட். சரி . சரி = புதிய முனை ( இருபத்து ஒன்று ) ;

காட்சி இலை முனைகள் ( ரூட்நோட் ) ;

மேலே உள்ள குறியீட்டின் விளக்கம் கீழே எழுதப்பட்டுள்ளது:

  • முதலில், '' ஒன்றை உருவாக்கவும் முனை 'ஒற்றை அளவுருவைப் பெறும் வகுப்பு' மதிப்பு ” இது புதிதாக உருவாக்கப்பட்ட முனையின் மதிப்பாக அமைக்கப்பட்டு, இடது மற்றும் வலது பக்கங்கள் பூஜ்யமாக அமைக்கப்படும். மேலே உள்ள எடுத்துக்காட்டில் செய்ததைப் போலவே.
  • அடுத்து, ஒரு செயல்பாட்டை உருவாக்கவும் ' DisplayLeafNodes() 'இது' என்ற ஒற்றை அளவுருவை ஏற்றுக்கொள்கிறது ரூட்நோட் ”. இந்த 'ரூட்நோட்' பைனரி மரமாக கருதப்படுகிறது மற்றும் அதன் வெறுமை முதலில் சரிபார்க்கப்படுகிறது.
  • முனை காலியாக இல்லை என்றால், '' என்ற வெற்று பட்டியல் பட்டியல் ' உருவாக்கப்பட்டு ' ரூட்நோட் 'அளவுரு அதில்' ஐப் பயன்படுத்தி செருகப்படுகிறது மிகுதி() ”முறை.
  • பின்னர், ' போது() 'ஒரு' நீளம் வரை இயங்கும் பயன்படுத்தப்படுகிறது பட்டியல் ”. வளையத்தின் உள்ளே, ஒரு மரத்தின் அடிப்பகுதியில் வசிக்கும் உறுப்பு அல்லது ' பட்டியல் '' ஐப் பயன்படுத்தி அகற்றப்படும் பாப்() ”முறை.
  • இப்போது, ​​'இன் இருப்பு விட்டு 'மற்றும்' சரி 'rootNode' இன் பக்கங்கள் சரிபார்க்கப்பட்டன, மேலும் இரண்டு பக்கங்களும் இல்லை என்றால், அதில் குழந்தை முனை இல்லை என்று அர்த்தம். பின்னர், இந்த முனை திரையில் காட்டப்பட்டு இலை முனையாக அடையாளம் காணப்படும்.
  • இடது அல்லது வலது பக்கத்தில் ஒரு முனை இருந்தால் அதற்கு குழந்தைகள் உள்ளனர் என்று அர்த்தம். பின்னர் அது' விட்டு 'மற்றும்' சரி 'முனைக்குள் தள்ளப்படுகிறது' பட்டியல் 'இலை முனையை கண்டறியும் மேலும் செயல்பாட்டிற்கு.
  • முடிவில், 'க்கான அளவுருக்களாக முனை மதிப்புகளைக் கடந்து தனிப்பயன் பைனரி மரத்தை உருவாக்கவும். முனை ”வகுப்பு கட்டமைப்பாளர். உருவாக்கிய பிறகு, 'ரூட்நோட்' என்ற மரத்தை ''க்கான வாதமாக அனுப்பவும் DisplayLeafNodes() ” செயல்பாடு.

தொகுத்த பிறகு உருவாக்கப்பட்ட வெளியீடு, வழங்கப்பட்ட மரத்தின் இலை முனைகள் அச்சிடப்பட்டிருப்பதைக் காட்டுகிறது:

போனஸ் உதவிக்குறிப்பு: பைனரி மரத்தின் இலை முனைகளை வலமிருந்து இடது திசையில் அச்சிடுதல்

குழந்தை முனைகள் இல்லாத அனைத்து இலை முனைகளையும் மீட்டெடுக்க ' சரி ” முதல் ” விட்டு ” திசையில், சுழல்நிலை அணுகுமுறை அதன் எளிமை காரணமாக மிகவும் பரிந்துரைக்கப்படுகிறது. உதாரணமாக, மேலே உள்ள பிரிவுகளில் விவாதிக்கப்பட்ட அதே மரம் இலை முனையை மீட்டெடுக்கப் பயன்படுத்தப்படும் ஆனால் ' சரி 'க்கு' விட்டு ” திசை, கீழே காட்டப்பட்டுள்ளபடி:

வர்க்கம் முனை
{
கட்டமைப்பாளர் ( மதிப்பு )
{
இது . தகவல்கள் = மதிப்பு ;
இது . விட்டு = ஏதுமில்லை ;
இது . சரி = ஏதுமில்லை ;
}
} ;


செயல்பாடு காட்சி இலை முனைகள் ( வேர் )
{
என்றால் ( வேர் == ஏதுமில்லை )
{
திரும்ப ;
}

என்றால் ( வேர். விட்டு == ஏதுமில்லை && வேர். சரி == ஏதுமில்லை )
{
ஆவணம். எழுது ( வேர். தகவல்கள் + '' ) ;
திரும்ப ;
}
என்றால் ( வேர். சரி != ஏதுமில்லை )
{
காட்சி இலை முனைகள் ( வேர். சரி ) ;
}
என்றால் ( வேர். விட்டு != ஏதுமில்லை )
{
காட்சி இலை முனைகள் ( வேர். விட்டு ) ;
}
}


ரூட்நோடாக இருந்தது = புதிய முனை ( 3 ) ;
ரூட்நோட். விட்டு = புதிய முனை ( 6 ) ;
ரூட்நோட். சரி = புதிய முனை ( 9 ) ;
ரூட்நோட். விட்டு . விட்டு = புதிய முனை ( 12 ) ;
ரூட்நோட். விட்டு . சரி = புதிய முனை ( பதினைந்து ) ;
ரூட்நோட். விட்டு . சரி . சரி = புதிய முனை ( 24 ) ;
ரூட்நோட். சரி . விட்டு = புதிய முனை ( 18 ) ;
ரூட்நோட். சரி . சரி = புதிய முனை ( இருபத்து ஒன்று ) ;

காட்சி இலை முனைகள் ( ரூட்நோட் ) ;

மேலே குறிப்பிடப்பட்ட குறியீடு இதுபோல் செயல்படுகிறது:

  • முதலில், வகுப்பு ' முனை ” மேலே உள்ள உதாரணங்களில் செய்யப்பட்ட இணைப்பை மரத்தில் ஒரு புதிய முனையைச் சேர்க்க இயல்புநிலை கட்டமைப்பாளரைப் பயன்படுத்தும் உருவாக்கப்பட்டது.
  • அடுத்து, ' டிஸ்ப்ளே லீட்நோட்ஸ்() '' என்ற ஒற்றை அளவுருவை ஏற்றுக்கொள்ளும் செயல்பாடு உருவாக்கப்பட்டது ரூட்நோட் ”. இந்த அளவுரு சரிபார்க்கப்பட்டது ' ஏதுமில்லை 'நிலை வழியாக' என்றால் ” அறிக்கை.
  • வழங்கப்பட்ட முனை உண்மை இல்லை என்றால், அதன் ' விட்டு 'மற்றும்' சரி 'பக்க முனைகள் சரிபார்க்கப்படுகின்றன' ஏதுமில்லை ' நிலை. இரண்டும் பூஜ்யமாக இருந்தால், முனை '' என அடையாளம் காணப்படும் இலை ” முனை மற்றும் வலைப்பக்கத்தில் அச்சிடப்பட்டது.
  • அதன் பிறகு, கடந்து செல்லவும் ' சரி 'மற்றும்' விட்டு 'இன்' முனைகள் ரூட்நோட் 'க்கு' DisplayLeafNodes() ” செயல்பாடு.
  • 'ஐப் பயன்படுத்தி நிகழ்வுகளை உருவாக்குவதன் மூலம் ஒவ்வொரு முனையின் நிலையை ஒதுக்கவும் புதிய 'முக்கிய சொல் மற்றும்' முனை() 'கட்டமைப்பாளர் மற்றும் நிலையை கட்டமைப்பாளர் அளவுருவாகக் குறிப்பிடுதல்.
  • ' விட்டு ” என்பது மூல முனையின் இடது நிலை மற்றும் “ விட்டு.இடது ” நிலை என்றால் இடது அல்லது இடது. '' என்ற விஷயத்திலும் இதே அணுகுமுறை பயன்படுத்தப்படுகிறது. சரி 'மற்றும்' சரி ”.
  • இறுதியாக, கடந்து செல்லவும் ' ரூட்நோட் 'ஒரு வாதமாக' displayLeafNode() ” செயல்பாடு.

உருவாக்கப்பட்ட வெளியீடு, இலை முனைகள் வலமிருந்து இடப்புற திசையில் அச்சிடப்பட்டிருப்பதைக் காட்டுகிறது.

பைனரி மரத்தின் அனைத்து இலை முனைகளையும் விரும்பிய திசையில் அச்சிடுவது அவ்வளவுதான்.

முடிவுரை

பைனரி மரத்தின் அனைத்து இலை முனைகளையும் அச்சிட, மர முனைகளுக்கு மதிப்புகளை உருவாக்கி ஒதுக்கும் ஒரு சீரற்ற வகுப்பை உருவாக்கவும். அடுத்து, மரத்தின் ஒற்றை முனையை மேலிருந்து கீழாகப் படிநிலையில் ஏற்றுக்கொள்ளும் சீரற்ற செயல்பாட்டை உருவாக்கவும். இந்த செயல்பாடு பலவற்றைக் கொண்டுள்ளது என்றால் '' என்பதை சரிபார்க்கும் நிபந்தனைகள் முனை ' காலியாக இல்லை மற்றும் அதில் முனைகள் இல்லை ' விட்டு 'மற்றும்' சரி 'திசை, பின்னர் அந்த முனை ஒரு' எனக் கருதப்படுகிறது இலை ” முனை மற்றும் கன்சோலில் காட்டப்படும். பைனரி மரத்தின் அனைத்து இலை முனைகளையும் இடமிருந்து வலமாக அல்லது வலமிருந்து இடமாக அச்சிடுவதற்கான செயல்முறையை இந்த வழிகாட்டி விளக்கியுள்ளது.