কীভাবে জাভাস্ক্রিপ্টে বাইনারি ট্রির সমস্ত লিফ নোড বাম থেকে ডানে মুদ্রণ করবেন?

Kibhabe Jabhaskripte Ba Inari Trira Samasta Lipha Noda Bama Theke Dane Mudrana Karabena



একটি বাইনারি ট্রিতে একাধিক নোড থাকে যা শীর্ষবিন্দুর মাধ্যমে সংযুক্ত থাকে, প্রতিটি নোড সর্বাধিক দুটি চাইল্ড নোডের সাথে সংযুক্ত হতে পারে যা এর চাইল্ড নোড নামে পরিচিত। যদি ' নোড 'কোন প্যারেন্ট নোড নেই কিন্তু কিছু চাইল্ড নোড রয়েছে যাতে নাতি-নাতনি নোড থাকে, তারপর এটি '' নামে পরিচিত মূল 'নোড। নোড হল একটি ' ভিতরের ” নোডে যদি প্যারেন্ট নোড এবং চাইল্ড নোড থাকে। দ্য ' পাতা ” নোডের একটি প্যারেন্ট নোড আছে কিন্তু কোন চাইল্ড নোডের অর্থ হল সেই নোডগুলি যেগুলি ডেড এন্ড।

আলোচিত ধারণাগুলির চাক্ষুষ উপস্থাপনা নীচের চিত্রে দেখানো হয়েছে:







এই নির্দেশিকাটি নীচে উল্লিখিত বিভাগগুলি কভার করে একটি বাইনারি গাছের সমস্ত পাতার নোড মুদ্রণের প্রক্রিয়া ব্যাখ্যা করে:



কিভাবে লিফ নোড সনাক্ত করতে হয়?

দ্য ' পাতা 'নোডগুলি হল সেইগুলি যেগুলির কোনও চাইল্ড নোড নেই, বা নির্দিষ্ট হতে যা ' উচ্চতা 'এর' 0 ” যদি নোডের একটি ' উচ্চতা ' অপেক্ষা বৃহত্তর ' 0 ” তাহলে সেই নোডটি ভেতরের নোড বা রুট নোড হতে পারে। দ্য ' পাতা এই নোডটি যেখান থেকে উৎপন্ন হয়েছে সেখান থেকে মূল উৎস সনাক্ত করতে নোডগুলি সাধারণত ব্যাকট্র্যাক করা হয়। এটি বেশিরভাগই একটি ত্রুটি বা সমস্যার কারণ খুঁজে বের করার জন্য অনুসন্ধান বা ত্রুটি-সন্ধানী অ্যালগরিদম ব্যবহার করা হয়।



কীভাবে জাভাস্ক্রিপ্টে বাইনারি ট্রির সমস্ত লিফ নোড বাম থেকে ডানে মুদ্রণ করবেন?

দুটি পন্থা আছে ' পুনরাবৃত্তি ' এবং ' পুনরাবৃত্তিমূলক 'প্রদত্ত বাইনারি গাছে উপলব্ধ সমস্ত লিফ নোড পছন্দসই নির্বাচন করতে' বাম ' প্রতি ' অধিকার ' অভিমুখ. এই পদ্ধতির ব্যবহারিক বাস্তবায়ন নীচে বর্ণিত বিভাগে প্রদর্শিত হয়:





পদ্ধতি 1: একটি বাইনারি গাছের সমস্ত লিফ নোড বাম থেকে ডানে বারবার মুদ্রণ করুন

পুনরাবৃত্ত পদ্ধতি একটি মধ্যে সমস্ত নোড নির্বাচন করে গভীরতা-প্রথম অনুসন্ধান অ্যালগরিদম পদ্ধতি যা প্রথমে পুরো বাম পাশের নোডগুলি অতিক্রম করে তারপর মধ্যবর্তী নোড এবং শেষে ডান পাশের নোডগুলিকে অতিক্রম করে৷ এই অপারেশনটি প্রতিটি নোডের জন্য পুনরাবৃত্তিমূলকভাবে সঞ্চালিত হয় এবং যখন ' পাতা 'নোড সনাক্ত করা হয়. এই ধারণাটি আরও ভালভাবে বুঝতে, নীচের কোড স্নিপেটটি দেখুন:

ক্লাস নোড
{
নির্মাণকারী ( )
{
এই . বিষয়বস্তু = 0 ;
এই . বাম = খালি ;
এই . অধিকার = খালি ;
}
} ;

যেখানে displayLeafNodes = ( rootNode ) =>
{
যদি ( rootNode == খালি )
ফিরে ;

যদি ( rootNode. বাম == খালি && rootNode. অধিকার == খালি )
{
নথি লিখুন ( rootNode. বিষয়বস্তু + '' ) ;
ফিরে ;
}

যদি ( rootNode. বাম != খালি )
ডিসপ্লেলিফনোডস ( rootNode. বাম ) ;
যদি ( rootNode. অধিকার != খালি )
ডিসপ্লেলিফনোডস ( rootNode. অধিকার ) ;
}
নমুনা নোড ছিল = ( ভাল ) =>
{
tempNode ছিল = নতুন নোড ( ) ;
tempNode. বিষয়বস্তু = ভাল ;
tempNode. বাম = খালি ;
tempNode. অধিকার = খালি ;
ফিরে tempNode ;
}
রুটনোড ছিল = provNode ( 3 ) ;
rootNode. বাম = provNode ( 6 ) ;
rootNode. অধিকার = provNode ( 9 ) ;
rootNode. বাম . বাম = provNode ( 12 ) ;
rootNode. বাম . অধিকার = provNode ( পনের ) ;
rootNode. বাম . অধিকার . অধিকার = provNode ( 24 ) ;
rootNode. অধিকার . বাম = provNode ( 18 ) ;
rootNode. অধিকার . অধিকার = provNode ( একুশ ) ;

ডিসপ্লেলিফনোডস ( rootNode ) ;

উপরের কোড ব্লকের ব্যাখ্যা নীচে বর্ণিত হয়েছে:



  • প্রথমে একটি ক্লাস তৈরি করুন যার নাম “ নোড ', যা একটি নতুন নোড তৈরি করে এবং এর মান সেট করে ' 0 ” সংযুক্ত ' বাম ' এবং ' অধিকার ' পাশের নোডগুলি ' এ সেট করা হয়েছে খালি ডিফল্টরূপে ক্লাস কনস্ট্রাক্টর ব্যবহার করে।
  • পরবর্তী, একটি সংজ্ঞায়িত করুন ' displayLeafNodes() ' ফাংশন যা 'এর একটি একক প্যারামিটার গ্রহণ করে rootNode ” এই প্যারামেট্রিক মানটিকে একটি বাইনারি গাছের বর্তমানে নির্বাচিত নোড হিসাবে বিবেচনা করা হয়।
  • ফাংশনের ভিতরে, ' যদি ' বিবৃতিটি পরীক্ষা করার জন্য ব্যবহার করা হয় কিনা ' rootNode ” নাল বা না. এর ব্যাপারে ' খালি ” সেই নোডের জন্য আরও মৃত্যুদন্ড বন্ধ হয়ে গেছে। অন্য ক্ষেত্রে, rootNode “ বাম ' এবং ' অধিকার 'সাইড নোডগুলি' এর জন্য পরীক্ষা করা হয় খালি ” যদি উভয়ই শূন্য হয়, তাহলে এর মান “ নোড ” ছাপা হয়।
  • যদি ' বাম 'বা' অধিকার ' নোড 'নাল' নয়, তারপর নোডের সেই দিকটি ' displayLeafNodes() ” পুনরাবৃত্ত অপারেশন জন্য ফাংশন.
  • 'নামক একটি নতুন ফাংশন সংজ্ঞায়িত করুন provNode() ' যেটি ' এর একক প্যারামিটার গ্রহণ করে ভাল ” ফাংশনের ভিতরে একটি নতুন উদাহরণ তৈরি করুন ' নোড 'শ্রেণীর নাম' tempNode ” প্যারামেট্রিক বরাদ্দ করুন ' ভাল 'শ্রেণী সম্পত্তির মান হিসাবে' বিষয়বস্তু 'এবং সেট করুন' বাম ' এবং ' অধিকার 'সাইড নোড থেকে' খালি ' গতানুগতিক.
  • অবশেষে, 'নামের একটি বস্তু তৈরি করুন rootNode 'এর জন্য' provNode() ” ফাংশন এবং এই ফাংশন প্যারামিটার হিসাবে নোড মান পাস করুন। যোগ করে বাম এবং ডান পাশের নোডগুলি তৈরি করুন ' বাম ' এবং ' অধিকার 'রুটনোড' সহ কীওয়ার্ড এবং একই ফাংশন ব্যবহার করে তাদের মান নির্ধারণ করুন ' provNode()
  • দ্য ' বাম ' মানে রুট নোডের বাম অবস্থান এবং ' left.left ' অবস্থান মানে বাম থেকে বাম একই পদ্ধতির ক্ষেত্রে প্রয়োগ করা হয় ' অধিকার ' এবং ' অধিকার '
  • ট্রি সংজ্ঞায়িত করার পরে, 'রুটনোড' এর জন্য একটি যুক্তি হিসাবে পাস করুন displayLeadNodes() ” তৈরি করা গাছের সমস্ত লিফ নোড নির্বাচন এবং প্রিন্ট করার ফাংশন।

সংকলনের পরে উত্পন্ন আউটপুট নিশ্চিত করে যে প্রদত্ত গাছের পাতার নোডটি পুনরুদ্ধার করা হয়েছে এবং কনসোলে মুদ্রিত হয়েছে:

পদ্ধতি 2: পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে একটি বাইনারি গাছের সমস্ত লিফ নোড মুদ্রণ করুন

দ্য ' পুনরাবৃত্তিমূলক 'পন্থা হল সবচেয়ে কার্যকর পদ্ধতি, এটি 'এর ধারণা ব্যবহার করে ধাক্কা ' এবং ' পপ ' নির্বাচন করতে ' পাতা 'নোড। এই পদ্ধতির মূল পয়েন্ট বা কাজগুলি নীচে বর্ণিত হয়েছে:

ক্লাস নোড
{
নির্মাণকারী ( মান )
{
এই . তথ্য = মান ;
এই . বাম = খালি ;
এই . অধিকার = খালি ;
}
} ;

যেখানে displayLeafNodes = ( rootNode ) =>
{
যদি ( ! rootNode )
ফিরে ;
যাক তালিকা = [ ] ;
তালিকা ধাক্কা ( rootNode ) ;

যখন ( তালিকা দৈর্ঘ্য > 0 ) {
rootNode = তালিকা [ তালিকা দৈর্ঘ্য - 1 ] ;
তালিকা পপ ( ) ;
যদি ( ! rootNode. বাম && ! rootNode. অধিকার )
নথি লিখুন ( rootNode. তথ্য + '' ) ;
যদি ( rootNode. অধিকার )
তালিকা ধাক্কা ( rootNode. অধিকার ) ;
যদি ( rootNode. বাম )
তালিকা ধাক্কা ( rootNode. বাম ) ;
}
}

রুটনোড ছিল = নতুন নোড ( 3 ) ;
rootNode. বাম = নতুন নোড ( 6 ) ;
rootNode. অধিকার = নতুন নোড ( 9 ) ;
rootNode. বাম . বাম = নতুন নোড ( 12 ) ;
rootNode. বাম . অধিকার = নতুন নোড ( পনের ) ;
rootNode. বাম . অধিকার . অধিকার = নতুন নোড ( 24 ) ;
rootNode. অধিকার . বাম = নতুন নোড ( 18 ) ;
rootNode. অধিকার . অধিকার = নতুন নোড ( একুশ ) ;

ডিসপ্লেলিফনোডস ( rootNode ) ;

উপরের কোডের ব্যাখ্যা নিচে লেখা হয়েছে:

  • প্রথমে একটি তৈরি করুন ' নোড ' ক্লাস যা একটি একক প্যারামিটার পায় ' মান ' যা নতুন তৈরি নোডের মান হিসাবে সেট করা হয়, এবং বাম এবং ডান দিক নাল সেট করা হয়। ঠিক যেমন উপরের উদাহরণে করা হয়েছে।
  • এরপরে, একটি ফাংশন তৈরি করুন ' displayLeafNodes() ' যেটি ' এর একটি একক প্যারামিটার গ্রহণ করে rootNode ” এই 'rootNode' বাইনারি ট্রি হিসাবে বিবেচিত হয় এবং এর শূন্যতা প্রথমে পরীক্ষা করা হয়।
  • যদি নোড খালি না থাকে, তাহলে 'নামক একটি খালি তালিকা তালিকা ' তৈরি হয় এবং ' rootNode ' প্যারামিটারটি ' ব্যবহার করে এতে ঢোকানো হয় ধাক্কা () 'পদ্ধতি।
  • এরপর ' যখন() ' ব্যবহার করা হয় যা একটি ' এর দৈর্ঘ্য পর্যন্ত কার্যকর করে তালিকা ” লুপের ভিতরে, একটি গাছের নীচে থাকা উপাদান বা ' তালিকা '' ব্যবহার করে সরানো হয় পপ() 'পদ্ধতি।
  • এখন, এর অস্তিত্ব ' বাম ' এবং ' অধিকার 'rootNode' এর দিকগুলি চেক করা হয়েছে, এবং যদি উভয় পক্ষই বিদ্যমান না থাকে তবে এর মানে কোন চাইল্ড নোড নেই। তারপর, এই নোডটি স্ক্রিনে প্রদর্শিত হয় এবং একটি লিফ নোড হিসাবে চিহ্নিত হয়।
  • যদি বাম বা ডান দিকে একটি নোড থাকে তার মানে শিশু আছে। তারপর যে ' বাম ' এবং ' অধিকার 'নোড' মধ্যে ধাক্কা পায় তালিকা ” লিফ নোড খোঁজার আরও অপারেশনের জন্য।
  • শেষ পর্যন্ত, নোডের মানগুলিকে প্যারামিটার হিসাবে পাস করে একটি কাস্টম বাইনারি ট্রি তৈরি করুন “ নোড 'শ্রেণী নির্মাণকারী। তৈরি করার পরে, 'রুটনোড' এর জন্য একটি যুক্তি হিসাবে ট্রি পাস করুন displayLeafNodes() ' ফাংশন।

সংকলনের পরে উত্পন্ন আউটপুট দেখায় যে প্রদত্ত গাছের পাতার নোডগুলি মুদ্রিত হয়েছে:

বোনাস টিপ: ডান থেকে বাম দিক থেকে একটি বাইনারি গাছের পাতার নোড মুদ্রণ

' অধিকার ' প্রতি ' বাম ” দিকনির্দেশনা, পুনরাবৃত্ত পদ্ধতির সহজতার কারণে সবচেয়ে বেশি সুপারিশ করা হয়। উদাহরণস্বরূপ, উপরের বিভাগে আলোচিত একই গাছটি পাতার নোড পুনরুদ্ধার করতে ব্যবহার করা হবে কিন্তু ' অধিকার 'এর কাছে' বাম ' দিকনির্দেশ, নীচে দেখানো হিসাবে:

ক্লাস নোড
{
নির্মাণকারী ( মান )
{
এই . তথ্য = মান ;
এই . বাম = খালি ;
এই . অধিকার = খালি ;
}
} ;


ফাংশন displayLeafNodes ( মূল )
{
যদি ( মূল == খালি )
{
ফিরে ;
}

যদি ( মূল বাম == খালি && মূল অধিকার == খালি )
{
নথি লিখুন ( মূল তথ্য + '' ) ;
ফিরে ;
}
যদি ( মূল অধিকার != খালি )
{
ডিসপ্লেলিফনোডস ( মূল অধিকার ) ;
}
যদি ( মূল বাম != খালি )
{
ডিসপ্লেলিফনোডস ( মূল বাম ) ;
}
}


রুটনোড ছিল = নতুন নোড ( 3 ) ;
rootNode. বাম = নতুন নোড ( 6 ) ;
rootNode. অধিকার = নতুন নোড ( 9 ) ;
rootNode. বাম . বাম = নতুন নোড ( 12 ) ;
rootNode. বাম . অধিকার = নতুন নোড ( পনের ) ;
rootNode. বাম . অধিকার . অধিকার = নতুন নোড ( 24 ) ;
rootNode. অধিকার . বাম = নতুন নোড ( 18 ) ;
rootNode. অধিকার . অধিকার = নতুন নোড ( একুশ ) ;

ডিসপ্লেলিফনোডস ( rootNode ) ;

উপরে বর্ণিত কোড এই মত কাজ করে:

  • প্রথম, ক্লাস ' নোড ” তৈরি করা হয়েছে যা ডিফল্ট কনস্ট্রাক্টর ব্যবহার করে ট্রিতে একটি নতুন নোড যোগ করে ঠিক উপরের উদাহরণে করা লিঙ্কটি।
  • পরবর্তী, ' displayLeadNodes() ' ফাংশন তৈরি করা হয় যা 'এর একটি একক প্যারামিটার গ্রহণ করে rootNode ” এই প্যারামিটারটি 'এর জন্য পরীক্ষা করা হয়েছে খালি 'এর মাধ্যমে শর্ত' যদি 'বিবৃতি।
  • যদি প্রদত্ত নোড সত্য না হয়, তাহলে তার ' বাম ' এবং ' অধিকার 'সাইড নোডগুলি' এর জন্য পরীক্ষা করা হয় খালি 'শর্ত। যদি উভয়ই শূন্য হয়, তাহলে নোডটিকে '' হিসাবে চিহ্নিত করা হবে পাতা ” নোড এবং ওয়েবপৃষ্ঠায় মুদ্রিত।
  • এর পরে, পাস করুন ' অধিকার ' এবং ' বাম 'এর নোড' rootNode 'এর কাছে' displayLeafNodes() ' ফাংশন।
  • ' ব্যবহার করে দৃষ্টান্ত তৈরি করে প্রতিটি নোডের অবস্থান বরাদ্দ করুন নতুন ' কীওয়ার্ড এবং ' নোড() কনস্ট্রাক্টর এবং কনস্ট্রাক্টর প্যারামিটার হিসাবে অবস্থান নির্দিষ্ট করা।
  • দ্য ' বাম ' মানে রুট নোডের বাম অবস্থান এবং ' left.left ' অবস্থান মানে বাম বা বাম। একই পদ্ধতির ক্ষেত্রে প্রয়োগ করা হয় ' অধিকার ' এবং ' অধিকার
  • অবশেষে, পাস করুন ' rootNode 'এর পক্ষে যুক্তি হিসাবে' displayLeafNode() ' ফাংশন।

উৎপন্ন আউটপুট দেখায় যে লিফ নোডগুলি ডান থেকে বাম দিকে মুদ্রিত হয়।

যে কোনো পছন্দসই দিকে একটি বাইনারি গাছের সমস্ত পাতার নোড মুদ্রণ সম্পর্কে এটি সব।

উপসংহার

একটি বাইনারি গাছের সমস্ত লিফ নোড প্রিন্ট করতে, একটি র্যান্ডম ক্লাস তৈরি করুন যা ট্রি নোডগুলিতে মান তৈরি করে এবং বরাদ্দ করে। এর পরে, একটি র্যান্ডম ফাংশন তৈরি করুন যা উপরে-থেকে-নিচের শ্রেণিবিন্যাসে গাছের একটি একক নোড গ্রহণ করে। এই ফাংশনটিতে একাধিক ' যদি ' শর্ত যা পরীক্ষা করে কিনা ' নোড 'খালি নয় এবং এটিতে কোন নোড নেই' বাম ' এবং ' অধিকার ' দিকনির্দেশ, তারপর সেই নোডটিকে ' হিসাবে বিবেচনা করা হয় পাতা ” নোড এবং কনসোলে প্রদর্শিত হয়। এই নির্দেশিকাটি একটি বাইনারি গাছের সমস্ত পাতার নোড বাম থেকে ডানে বা ডান থেকে বাম দিকে প্রিন্ট করার পদ্ধতি ব্যাখ্যা করেছে।