جاوا اسکرپٹ میں بائنری ٹری کے تمام لیف نوڈس کو بائیں سے دائیں کیسے پرنٹ کریں؟

Jawa Askrp My Baynry Ry K Tmam Lyf Nw S Kw Bayy S Dayy Kys Prn Kry



ایک بائنری ٹری متعدد نوڈس پر مشتمل ہوتا ہے جو عمودی کے ذریعے جڑے ہوتے ہیں، ہر نوڈ کو زیادہ سے زیادہ دو چائلڈ نوڈس کے ساتھ جوڑا جاسکتا ہے جو اس کے چائلڈ نوڈس کے نام سے جانے جاتے ہیں۔ اگر ' نوڈ 'کوئی پیرنٹ نوڈ نہیں ہے لیکن اس میں کچھ چائلڈ نوڈس ہوتے ہیں جن میں پوتے نوڈس ہوتے ہیں، پھر اسے 'کے نام سے جانا جاتا ہے۔ جڑ نوڈ نوڈ ایک ہے ' اندرونی ” نوڈ اگر اس میں پیرنٹ نوڈ اور چائلڈ نوڈ ہے۔ ' پتی نوڈ میں پیرنٹ نوڈ ہوتا ہے لیکن کوئی چائلڈ نوڈ نہیں ہوتا یعنی وہ نوڈس جو ڈیڈ اینڈ ہوتے ہیں۔

زیر بحث تصورات کی بصری نمائندگی ذیل کی تصویر میں دکھائی گئی ہے۔







یہ گائیڈ ذیل میں بیان کردہ حصوں کا احاطہ کرتے ہوئے بائنری درخت کے تمام لیف نوڈس کو پرنٹ کرنے کے عمل کی وضاحت کرتا ہے:



لیف نوڈس کی شناخت کیسے کریں؟

' پتی نوڈس وہ ہوتے ہیں جن میں چائلڈ نوڈس نہیں ہوتے ہیں، یا مخصوص ہونے کے لیے جن میں ' اونچائی 'کا' 0 ' اگر نوڈ میں ' اونچائی ' اس سے بڑا ' 0 پھر وہ نوڈ اندرونی نوڈ یا روٹ نوڈ ہو سکتا ہے۔ ' پتی نوڈس کو عام طور پر اصل ماخذ کی شناخت کے لیے پیچھے ہٹا دیا جاتا ہے جہاں سے یہ نوڈ تیار کیا گیا ہے۔ یہ زیادہ تر کسی غلطی یا مسئلے کی وجہ تلاش کرنے کے لیے تلاش یا غلطی تلاش کرنے والے الگورتھم میں استعمال ہوتا ہے۔



جاوا اسکرپٹ میں بائنری ٹری کے تمام لیف نوڈس کو بائیں سے دائیں کیسے پرنٹ کریں؟

دو طریقے ہیں' تکراری 'اور' تکراری 'مطلوبہ بائنری ٹری میں دستیاب تمام لیف نوڈس کو منتخب کرنے کے لیے' بائیں 'سے' صحیح ' سمت. ان طریقوں کے عملی نفاذ کو ذیل میں بیان کردہ حصوں میں دکھایا گیا ہے:





طریقہ 1: بائنری درخت کے تمام لیف نوڈس کو بائیں سے دائیں بار بار پرنٹ کریں

تکراری نقطہ نظر a میں تمام نوڈس کو منتخب کرتا ہے۔ گہرائی سے پہلے تلاش کا الگورتھم وہ طریقہ جو پہلے پورے بائیں طرف کے نوڈس کو عبور کرتا ہے پھر درمیانی نوڈ اور آخر میں دائیں طرف کے نوڈس۔ یہ آپریشن ہر نوڈ کے لیے بار بار کیا جاتا ہے اور جب ' پتی نوڈس کی شناخت ہو جاتی ہے۔ اس تصور کو بہتر طور پر سمجھنے کے لیے، نیچے دیے گئے کوڈ کا ٹکڑا ملاحظہ کریں:

کلاس نوڈ
{
کنسٹرکٹر ( )
{
یہ . مواد = 0 ;
یہ . بائیں = خالی ;
یہ . صحیح = خالی ;
}
} ;

جہاں ڈسپلے لیف نوڈس = ( روٹ نوڈ ) =>
{
اگر ( روٹ نوڈ == خالی )
واپسی ;

اگر ( روٹ نوڈ بائیں == خالی && روٹ نوڈ صحیح == خالی )
{
دستاویز لکھنا ( روٹ نوڈ مواد + ' ) ;
واپسی ;
}

اگر ( روٹ نوڈ بائیں != خالی )
ڈسپلے لیف نوڈس ( روٹ نوڈ بائیں ) ;
اگر ( روٹ نوڈ صحیح != خالی )
ڈسپلے لیف نوڈس ( روٹ نوڈ صحیح ) ;
}
نمونہ نوڈ تھا۔ = ( val ) =>
{
tempNode تھا۔ = نئی نوڈ ( ) ;
tempNode. مواد = val ;
tempNode. بائیں = خالی ;
tempNode. صحیح = خالی ;
واپسی tempNode ;
}
روٹ نوڈ تھا۔ = provNode ( 3 ) ;
روٹ نوڈ بائیں = provNode ( 6 ) ;
روٹ نوڈ صحیح = provNode ( 9 ) ;
روٹ نوڈ بائیں . بائیں = provNode ( 12 ) ;
روٹ نوڈ بائیں . صحیح = provNode ( پندرہ ) ;
روٹ نوڈ بائیں . صحیح . صحیح = provNode ( 24 ) ;
روٹ نوڈ صحیح . بائیں = provNode ( 18 ) ;
روٹ نوڈ صحیح . صحیح = provNode ( اکیس ) ;

ڈسپلے لیف نوڈس ( روٹ نوڈ ) ;

مندرجہ بالا کوڈ بلاک کی وضاحت ذیل میں بیان کی گئی ہے:



  • سب سے پہلے، 'نامی کلاس بنائیں نوڈ '، جو ایک نیا نوڈ بناتا ہے اور اس کی قدر کو ' پر سیٹ کرتا ہے 0 ' منسلک ' بائیں 'اور' صحیح 'سائیڈ نوڈس سیٹ ہیں' خالی کلاس کنسٹرکٹر کا استعمال کرتے ہوئے بطور ڈیفالٹ۔
  • اگلا، ایک کی وضاحت کریں ڈسپلے لیف نوڈس () ' فنکشن جو ' کے ایک پیرامیٹر کو قبول کرتا ہے روٹ نوڈ ' اس پیرامیٹرک قدر کو بائنری ٹری کے فی الحال منتخب کردہ نوڈ کے طور پر سمجھا جاتا ہے۔
  • فنکشن کے اندر، ' اگر 'بیان کو چیک کرنے کے لیے استعمال کیا جاتا ہے کہ آیا' روٹ نوڈ ' کالعدم ہے یا نہیں؟ کی صورت میں ' خالی اس نوڈ کے لیے مزید عمل درآمد رک گیا۔ دوسری صورت میں، روٹ نوڈ ' بائیں 'اور' صحیح 'سائیڈ نوڈس کی جانچ پڑتال کی جاتی ہے' خالی ' اگر دونوں کالعدم ہیں تو اس کی قدر ' نوڈ 'چھاپا جاتا ہے۔
  • اگر ' بائیں 'یا' صحیح نوڈ 'نال' نہیں ہے، پھر نوڈ کے اس طرف کو ' ڈسپلے لیف نوڈس () تکراری آپریشن کے لیے فنکشن۔
  • ایک نئے فنکشن کی وضاحت کریں جس کا نام ' provNode() 'جو' کے واحد پیرامیٹر کو قبول کرتا ہے val ' فنکشن کے اندر ایک نئی مثال بنائیں ' نوڈ 'کلاس کا نام' tempNode ' پیرامیٹرک تفویض کریں ' val 'کلاس پراپرٹی کی قدر کے طور پر' مواد 'اور سیٹ کریں' بائیں 'اور' صحیح 'سائیڈ نوڈس سے' خالی 'بطور ڈیفالٹ۔
  • آخر میں، ایک آبجیکٹ بنائیں جس کا نام ' روٹ نوڈ ' کے لئے ' provNode() ” فنکشن اور اس فنکشن پیرامیٹر کے بطور نوڈ ویلیو پاس کریں۔ 'کا اضافہ کرکے بائیں اور دائیں طرف کے نوڈس بنائیں۔ بائیں 'اور' صحیح 'روٹ نوڈ' کے ساتھ مطلوبہ الفاظ اور اسی فنکشن کا استعمال کرتے ہوئے انہیں قدر تفویض کریں provNode() '
  • ' بائیں ' کا مطلب ہے روٹ نوڈ کی بائیں پوزیشن اور ' بائیں. بائیں 'پوزیشن کا مطلب ہے بائیں سے بائیں ایک ہی نقطہ نظر کا اطلاق' کے معاملے میں ہوتا ہے۔ صحیح 'اور' صحیح '
  • درخت کی وضاحت کرنے کے بعد، 'rootNode' کو دلیل کے طور پر پاس کریں۔ ڈسپلے لیڈ نوڈس () تخلیق شدہ درخت کے تمام لیف نوڈس کو منتخب کرنے اور پرنٹ کرنے کا فنکشن۔

تالیف کے بعد پیدا ہونے والا آؤٹ پٹ اس بات کی تصدیق کرتا ہے کہ فراہم کردہ درخت کے لیف نوڈ کو کنسول پر بازیافت اور پرنٹ کیا گیا ہے:

طریقہ 2: تکراری نقطہ نظر کا استعمال کرتے ہوئے بائنری ٹری کے تمام لیف نوڈس پرنٹ کریں

' تکراری نقطہ نظر سب سے زیادہ موثر نقطہ نظر ہے، یہ تصور کا استعمال کرتا ہے دھکا 'اور' پاپ 'منتخب کرنے کے لیے' پتی نوڈس اس نقطہ نظر کے اہم نکات یا کام ذیل میں بیان کیے گئے ہیں:

کلاس نوڈ
{
کنسٹرکٹر ( قدر )
{
یہ . ڈیٹا = قدر ;
یہ . بائیں = خالی ;
یہ . صحیح = خالی ;
}
} ;

جہاں ڈسپلے لیف نوڈس = ( روٹ نوڈ ) =>
{
اگر ( ! روٹ نوڈ )
واپسی ;
فہرست دو = [ ] ;
فہرست دھکا ( روٹ نوڈ ) ;

جبکہ ( فہرست لمبائی > 0 ) {
روٹ نوڈ = فہرست [ فہرست لمبائی - 1 ] ;
فہرست پاپ ( ) ;
اگر ( ! روٹ نوڈ بائیں && ! روٹ نوڈ صحیح )
دستاویز لکھنا ( روٹ نوڈ ڈیٹا + ' ) ;
اگر ( روٹ نوڈ صحیح )
فہرست دھکا ( روٹ نوڈ صحیح ) ;
اگر ( روٹ نوڈ بائیں )
فہرست دھکا ( روٹ نوڈ بائیں ) ;
}
}

روٹ نوڈ تھا۔ = نئی نوڈ ( 3 ) ;
روٹ نوڈ بائیں = نئی نوڈ ( 6 ) ;
روٹ نوڈ صحیح = نئی نوڈ ( 9 ) ;
روٹ نوڈ بائیں . بائیں = نئی نوڈ ( 12 ) ;
روٹ نوڈ بائیں . صحیح = نئی نوڈ ( پندرہ ) ;
روٹ نوڈ بائیں . صحیح . صحیح = نئی نوڈ ( 24 ) ;
روٹ نوڈ صحیح . بائیں = نئی نوڈ ( 18 ) ;
روٹ نوڈ صحیح . صحیح = نئی نوڈ ( اکیس ) ;

ڈسپلے لیف نوڈس ( روٹ نوڈ ) ;

مندرجہ بالا کوڈ کی وضاحت ذیل میں لکھی گئی ہے:

  • سب سے پہلے، تخلیق کریں ' نوڈ 'کلاس جو ایک پیرامیٹر حاصل کرتی ہے' قدر جو نئے بنائے گئے نوڈ کی قدر کے طور پر سیٹ کی گئی ہے، اور بائیں اور دائیں جانب کو null پر سیٹ کیا گیا ہے۔ جیسا کہ اوپر کی مثال میں کیا گیا ہے۔
  • اگلا، ایک فنکشن بنائیں ' ڈسپلے لیف نوڈس () 'جو' کا ایک پیرامیٹر قبول کرتا ہے روٹ نوڈ ' اس 'روٹ نوڈ' کو بائنری ٹری کے طور پر سمجھا جاتا ہے اور اس کے خالی پن کو پہلے چیک کیا جاتا ہے۔
  • اگر نوڈ خالی نہیں ہے، تو ایک خالی فہرست جس کا نام ہے ' فہرست 'بنایا جاتا ہے اور' روٹ نوڈ پیرامیٹر اس میں داخل کیا جاتا ہے دھکا () 'طریقہ.
  • پھر ' جبکہ() 'استعمال کیا جاتا ہے جو ایک کی لمبائی تک چلتا ہے' فہرست ' لوپ کے اندر، درخت کے نیچے رہنے والا عنصر یا ' فہرست 'کا استعمال کرتے ہوئے ہٹا دیا جاتا ہے' پاپ () 'طریقہ.
  • اب، کا وجود ' بائیں 'اور' صحیح 'rootNode' کے اطراف کو چیک کیا جاتا ہے، اور اگر دونوں اطراف موجود نہیں ہیں تو اس کا مطلب ہے کہ اس کا کوئی چائلڈ نوڈ نہیں ہے۔ پھر، یہ نوڈ اسکرین پر ظاہر ہوتا ہے اور اسے لیف نوڈ کے طور پر شناخت کیا جاتا ہے۔
  • اگر بائیں یا دائیں طرف نوڈ ہے تو اس کا مطلب ہے کہ اس کے بچے ہیں۔ پھر وہ ' بائیں 'اور' صحیح 'نوڈ کو دھکیل دیا جاتا ہے' فہرست لیف نوڈ کو تلاش کرنے کے مزید آپریشن کے لیے۔
  • آخر میں، نوڈ ویلیو کو پیرامیٹرز کے طور پر پاس کر کے ایک حسب ضرورت بائنری ٹری بنائیں۔ نوڈ 'کلاس کنسٹرکٹر۔ تخلیق کے بعد، درخت 'rootNode' کو دلیل کے طور پر پاس کریں ' ڈسپلے لیف نوڈس () فنکشن

تالیف کے بعد پیدا ہونے والے آؤٹ پٹ سے پتہ چلتا ہے کہ فراہم کردہ درخت کے لیف نوڈس پرنٹ کیے گئے ہیں:

بونس ٹپ: دائیں سے بائیں سمت بائنری درخت کے لیف نوڈس پرنٹ کرنا

تمام لیف نوڈس کو بازیافت کرنے کے لیے جن میں کوئی چائلڈ نوڈس نہیں ہیں۔ صحیح 'سے' بائیں ” سمت، تکراری نقطہ نظر اپنی آسانی کی وجہ سے سب سے زیادہ تجویز کردہ ہے۔ مثال کے طور پر، مندرجہ بالا حصوں میں بحث کی گئی وہی درخت لیف نوڈ کو بازیافت کرنے کے لیے استعمال کیا جائے گا لیکن ' صحیح ' کرنے کے لئے ' بائیں ' سمت، جیسا کہ ذیل میں دکھایا گیا ہے:

کلاس نوڈ
{
کنسٹرکٹر ( قدر )
{
یہ . ڈیٹا = قدر ;
یہ . بائیں = خالی ;
یہ . صحیح = خالی ;
}
} ;


فنکشن ڈسپلے لیف نوڈس ( جڑ )
{
اگر ( جڑ == خالی )
{
واپسی ;
}

اگر ( جڑ بائیں == خالی && جڑ صحیح == خالی )
{
دستاویز لکھنا ( جڑ ڈیٹا + ' ) ;
واپسی ;
}
اگر ( جڑ صحیح != خالی )
{
ڈسپلے لیف نوڈس ( جڑ صحیح ) ;
}
اگر ( جڑ بائیں != خالی )
{
ڈسپلے لیف نوڈس ( جڑ بائیں ) ;
}
}


روٹ نوڈ تھا۔ = نئی نوڈ ( 3 ) ;
روٹ نوڈ بائیں = نئی نوڈ ( 6 ) ;
روٹ نوڈ صحیح = نئی نوڈ ( 9 ) ;
روٹ نوڈ بائیں . بائیں = نئی نوڈ ( 12 ) ;
روٹ نوڈ بائیں . صحیح = نئی نوڈ ( پندرہ ) ;
روٹ نوڈ بائیں . صحیح . صحیح = نئی نوڈ ( 24 ) ;
روٹ نوڈ صحیح . بائیں = نئی نوڈ ( 18 ) ;
روٹ نوڈ صحیح . صحیح = نئی نوڈ ( اکیس ) ;

ڈسپلے لیف نوڈس ( روٹ نوڈ ) ;

اوپر بیان کردہ کوڈ اس طرح کام کرتا ہے:

  • سب سے پہلے، کلاس ' نوڈ ” بنایا گیا ہے جو پہلے سے طے شدہ کنسٹرکٹر کو درخت میں ایک نیا نوڈ شامل کرنے کے لیے استعمال کرتا ہے جیسا کہ اوپر کی مثالوں میں کیا گیا ہے۔
  • اگلا، ' ڈسپلے لیڈ نوڈس () ' فنکشن بنایا گیا ہے جو ' کے ایک پیرامیٹر کو قبول کرتا ہے روٹ نوڈ ' اس پیرامیٹر کی جانچ پڑتال کی گئی ہے ' خالی 'کے ذریعے شرط' اگر 'بیان.
  • اگر فراہم کردہ نوڈ درست نہیں ہے، تو اس کا ' بائیں 'اور' صحیح 'سائیڈ نوڈس کی جانچ پڑتال کی جاتی ہے' خالی ' حالت. اگر دونوں کالعدم ہیں، تو نوڈ کی شناخت بطور ' پتی نوڈ اور ویب پیج پر پرنٹ کیا گیا۔
  • اس کے بعد، پاس کریں ' صحیح 'اور' بائیں ' نوڈس ' روٹ نوڈ ' کرنے کے لئے ' ڈسپلے لیف نوڈس () فنکشن
  • 'کا استعمال کرتے ہوئے مثالیں بنا کر ہر نوڈ کی پوزیشن مختص کریں۔ نئی 'کلیدی لفظ اور' نوڈ() کنسٹرکٹر اور کنسٹرکٹر پیرامیٹر کے طور پر پوزیشن کی وضاحت کرنا۔
  • ' بائیں ' کا مطلب ہے روٹ نوڈ کی بائیں پوزیشن اور ' بائیں. بائیں پوزیشن کا مطلب ہے بائیں یا بائیں۔ اسی نقطہ نظر کا اطلاق کے معاملے میں ہوتا ہے۔ صحیح 'اور' صحیح '
  • آخر میں، پاس کریں ' روٹ نوڈ 'کی دلیل کے طور پر' ڈسپلے لیف نوڈ () فنکشن

پیدا شدہ آؤٹ پٹ سے پتہ چلتا ہے کہ لیف نوڈس کو دائیں سے بائیں سمت میں پرنٹ کیا جاتا ہے۔

یہ سب بائنری درخت کے تمام لیف نوڈس کو کسی بھی مطلوبہ سمت میں پرنٹ کرنے کے بارے میں ہے۔

نتیجہ

بائنری ٹری کے تمام لیف نوڈس کو پرنٹ کرنے کے لیے، ایک بے ترتیب کلاس بنائیں جو ٹری نوڈس کو قدریں تخلیق اور تفویض کرے۔ اگلا، ایک بے ترتیب فنکشن بنائیں جو اوپر سے نیچے کے درجہ بندی میں درخت کے ایک نوڈ کو قبول کرتا ہے۔ یہ فنکشن متعدد پر مشتمل ہے ' اگر 'حالات جو چیک کرتے ہیں کہ آیا' نوڈ 'خالی نہیں ہے اور اس میں کوئی نوڈس نہیں ہے' بائیں 'اور' صحیح ' سمت، پھر اس نوڈ کو سمجھا جاتا ہے ' پتی نوڈ اور کنسول پر ظاہر ہوتا ہے۔ اس گائیڈ نے بائنری درخت کے تمام لیف نوڈس کو بائیں سے دائیں یا دائیں سے بائیں سمت پرنٹ کرنے کے طریقہ کار کی وضاحت کی ہے۔