Bagaimana Cara Mencetak semua Node Daun Pohon Biner Dari Kiri ke Kanan di JavaScript?

Bagaimana Cara Mencetak Semua Node Daun Pohon Biner Dari Kiri Ke Kanan Di Javascript



Pohon biner terdiri dari beberapa node yang terhubung melalui simpul, setiap node dapat dihubungkan dengan paling banyak dua node anak yang disebut node anak. Jika “ simpul ” tidak memiliki node induk tetapi berisi beberapa node anak yang memiliki node cucu, maka disebut dengan “ akar ” simpul. Nodenya adalah “ batin ” node jika memiliki node induk dan node anak. “ daun ” Node mempunyai node induk tetapi tidak ada node anak berarti node yang buntu.

Representasi visual dari konsep yang dibahas ditunjukkan pada gambar di bawah ini:







Panduan ini menjelaskan proses mencetak semua simpul daun dari pohon biner dengan mencakup bagian yang disebutkan di bawah:



Bagaimana Mengidentifikasi Node Daun?

daun ” node adalah node yang tidak memiliki node turunan, atau lebih spesifiknya yang memiliki “ tinggi ' dari ' 0 ”. Jika node memiliki “ tinggi ' lebih besar dari ' 0 ” maka node tersebut dapat menjadi node dalam atau node root. “ daun ” node biasanya dilacak mundur untuk mengidentifikasi sumber asli dari mana node ini dihasilkan. Ini sebagian besar digunakan dalam algoritma pencarian atau pencarian kesalahan untuk menemukan penyebab kesalahan atau masalah.



Bagaimana Cara Mencetak semua Node Daun Pohon Biner Dari Kiri ke Kanan di JavaScript?

Ada dua pendekatan “ rekursif ' Dan ' berulang ” untuk memilih semua node daun yang tersedia di pohon biner yang disediakan di tempat yang diinginkan “ kiri ' ke ' Kanan ' arah. Implementasi praktis dari pendekatan-pendekatan ini ditunjukkan pada bagian di bawah ini:





Metode 1: Cetak Semua Node Daun Pohon Biner Dari Kiri ke Kanan Secara Rekursif

Pendekatan rekursif memilih semua node di a algoritma pencarian kedalaman-pertama cara yang pertama melintasi seluruh node sisi kiri kemudian node tengah dan node sisi kanan pada akhirnya. Operasi ini dilakukan secara rekursif untuk setiap node dan ketika tidak ada lagi yang melintasi “ daun ” node teridentifikasi. Untuk lebih memahami konsep ini, kunjungi cuplikan kode di bawah ini:

kelas simpul
{
konstruktor ( )
{
ini . isi = 0 ;
ini . kiri = batal ;
ini . Kanan = batal ;
}
} ;

di mana menampilkanLeafNodes = ( rootNode ) =>
{
jika ( rootNode == batal )
kembali ;

jika ( rootNode. kiri == batal && rootNode. Kanan == batal )
{
dokumen. menulis ( rootNode. isi + ' ' ) ;
kembali ;
}

jika ( rootNode. kiri != batal )
tampilanLeafNodes ( rootNode. kiri ) ;
jika ( rootNode. Kanan != batal )
tampilanLeafNodes ( rootNode. Kanan ) ;
}
adalah sampleNode = ( val ) =>
{
adalah tempNode = baru simpul ( ) ;
tempNode. isi = val ;
tempNode. kiri = batal ;
tempNode. Kanan = batal ;
kembali tempNode ;
}
adalah rootNode = provNode ( 3 ) ;
rootNode. kiri = provNode ( 6 ) ;
rootNode. Kanan = provNode ( 9 ) ;
rootNode. kiri . kiri = provNode ( 12 ) ;
rootNode. kiri . Kanan = provNode ( limabelas ) ;
rootNode. kiri . Kanan . Kanan = provNode ( 24 ) ;
rootNode. Kanan . kiri = provNode ( 18 ) ;
rootNode. Kanan . Kanan = provNode ( dua puluh satu ) ;

tampilanLeafNodes ( rootNode ) ;

Penjelasan dari blok kode di atas dinyatakan di bawah ini:



  • Pertama, buat kelas bernama “ simpul ”, yang membuat node baru dan menetapkan nilainya menjadi “ 0 ”. Terlampir “ kiri ' Dan ' Kanan ” node samping disetel ke “ batal ” secara default menggunakan konstruktor kelas.
  • Selanjutnya, tentukan “ tampilanLeafNodes() ” fungsi yang menerima satu parameter “ rootNode ”. Nilai parametrik ini dianggap sebagai simpul pohon biner yang dipilih saat ini.
  • Di dalam fungsinya, “ jika Pernyataan ” digunakan untuk memeriksa apakah “ rootNode ” batal atau tidak. Dalam kasus ' batal ” eksekusi lebih lanjut dihentikan untuk node tersebut. Dalam kasus lain, rootNode “ kiri ' Dan ' Kanan ” node samping diperiksa untuk “ batal ”. Jika keduanya nol, nilai “ simpul ” akan dicetak.
  • Jika “ kiri ' atau ' Kanan ” node bukan “null”, lalu teruskan sisi node tersebut ke “ tampilanLeafNodes() ” fungsi untuk operasi rekursif.
  • Tentukan fungsi baru bernama “ provNode() ” yang menerima parameter tunggal “ val ”. Di dalam fungsi, buat instance baru dari “ simpul ” kelas bernama “ tempNode ”. Tetapkan parametrik “ val ” sebagai nilai properti kelas “ isi ” dan atur “ kiri ' Dan ' Kanan ” node samping ke “ batal ” secara default.
  • Terakhir, buatlah objek bernama “ rootNode ' Untuk ' provNode() ” berfungsi dan meneruskan nilai simpul sebagai parameter fungsi ini. Buat node sisi kiri dan kanan dengan menambahkan “ kiri ' Dan ' Kanan ” kata kunci dengan “rootNode” dan berikan nilainya menggunakan fungsi yang sama “ provNode() ”.
  • kiri ” berarti posisi kiri dari simpul akar dan “ kiri.kiri ” posisi berarti pendekatan kiri dari kiri yang sama diterapkan dalam kasus “ Kanan ' Dan ' Kanan
  • Setelah mendefinisikan pohon, berikan “rootNode” sebagai argumen untuk “ tampilanLeadNodes() ” berfungsi untuk memilih dan mencetak semua simpul daun dari pohon yang dibuat.

Output yang dihasilkan setelah kompilasi mengonfirmasi bahwa simpul daun dari pohon yang disediakan telah diambil dan dicetak melalui konsol:

Metode 2: Cetak Semua Node Daun dari Pohon Biner Menggunakan Pendekatan Iteratif

berulang Pendekatan ” merupakan pendekatan yang paling efisien, menggunakan konsep “ dorongan ' Dan ' muncul ” untuk memilih “ daun ” node. Poin-poin penting atau cara kerja pendekatan ini dinyatakan di bawah ini:

kelas simpul
{
konstruktor ( nilai )
{
ini . data = nilai ;
ini . kiri = batal ;
ini . Kanan = batal ;
}
} ;

di mana menampilkanLeafNodes = ( rootNode ) =>
{
jika ( ! rootNode )
kembali ;
biarkan daftar = [ ] ;
daftar. dorongan ( rootNode ) ;

ketika ( daftar. panjang > 0 ) {
rootNode = daftar [ daftar. panjang - 1 ] ;
daftar. muncul ( ) ;
jika ( ! rootNode. kiri && ! rootNode. Kanan )
dokumen. menulis ( rootNode. data + ' ' ) ;
jika ( rootNode. Kanan )
daftar. dorongan ( rootNode. Kanan ) ;
jika ( rootNode. kiri )
daftar. dorongan ( rootNode. kiri ) ;
}
}

adalah rootNode = baru simpul ( 3 ) ;
rootNode. kiri = baru simpul ( 6 ) ;
rootNode. Kanan = baru simpul ( 9 ) ;
rootNode. kiri . kiri = baru simpul ( 12 ) ;
rootNode. kiri . Kanan = baru simpul ( limabelas ) ;
rootNode. kiri . Kanan . Kanan = baru simpul ( 24 ) ;
rootNode. Kanan . kiri = baru simpul ( 18 ) ;
rootNode. Kanan . Kanan = baru simpul ( dua puluh satu ) ;

tampilanLeafNodes ( rootNode ) ;

Penjelasan kode di atas ditulis di bawah ini:

  • Pertama, buat “ simpul ” kelas yang menerima satu parameter “ nilai ” yang ditetapkan sebagai nilai node yang baru dibuat, dan sisi kiri dan kanan disetel ke null. Seperti yang dilakukan pada contoh di atas.
  • Selanjutnya, buat fungsi “ tampilanLeafNodes() ” yang menerima satu parameter “ rootNode ”. 'RootNode' ini dianggap sebagai pohon biner dan kekosongannya diperiksa terlebih dahulu.
  • Jika node tidak kosong, maka daftar kosong bernama “ daftar ” dibuat dan “ rootNode Parameter ” dimasukkan ke dalamnya menggunakan “ dorongan() ' metode.
  • Kemudian, “ ketika() ” digunakan yang dijalankan hingga durasi “ daftar ”. Di dalam loop, elemen yang berada di bagian bawah pohon atau “ daftar ” akan dihapus menggunakan “ pop() ' metode.
  • Kini, keberadaan “ kiri ' Dan ' Kanan ” sisi “rootNode” dicentang, dan jika kedua sisi tidak ada berarti tidak memiliki node anak. Kemudian, simpul ini ditampilkan di layar dan diidentifikasi sebagai simpul daun.
  • Jika ada node di sisi kiri atau kanan berarti mempunyai anak. Lalu itu ' kiri ' Dan ' Kanan ” node didorong ke dalam “ daftar ” untuk operasi lebih lanjut dalam menemukan simpul daun.
  • Pada akhirnya, buat pohon biner khusus dengan meneruskan nilai simpul sebagai parameter untuk “ simpul ” konstruktor kelas. Setelah pembuatan, teruskan pohon “rootNode” sebagai argumen untuk “ tampilanLeafNodes() ' fungsi.

Output yang dihasilkan setelah kompilasi menunjukkan bahwa node daun dari pohon yang disediakan dicetak:

Tip Bonus: Mencetak Node Daun Pohon Biner Dari Arah Kanan ke Kiri

Untuk mengambil semua node daun yang tidak memiliki node anak di “ Kanan ' ke ' kiri ”, pendekatan rekursif adalah yang paling direkomendasikan karena kemudahannya. Misalnya, pohon yang sama yang dibahas pada bagian di atas akan digunakan untuk mengambil simpul daun tetapi di “ Kanan ” ke “ kiri ” arah, seperti yang ditunjukkan di bawah ini:

kelas simpul
{
konstruktor ( nilai )
{
ini . data = nilai ;
ini . kiri = batal ;
ini . Kanan = batal ;
}
} ;


tampilan fungsiLeafNodes ( akar )
{
jika ( akar == batal )
{
kembali ;
}

jika ( akar. kiri == batal && akar. Kanan == batal )
{
dokumen. menulis ( akar. data + ' ' ) ;
kembali ;
}
jika ( akar. Kanan != batal )
{
tampilanLeafNodes ( akar. Kanan ) ;
}
jika ( akar. kiri != batal )
{
tampilanLeafNodes ( akar. kiri ) ;
}
}


adalah rootNode = baru simpul ( 3 ) ;
rootNode. kiri = baru simpul ( 6 ) ;
rootNode. Kanan = baru simpul ( 9 ) ;
rootNode. kiri . kiri = baru simpul ( 12 ) ;
rootNode. kiri . Kanan = baru simpul ( limabelas ) ;
rootNode. kiri . Kanan . Kanan = baru simpul ( 24 ) ;
rootNode. Kanan . kiri = baru simpul ( 18 ) ;
rootNode. Kanan . Kanan = baru simpul ( dua puluh satu ) ;

tampilanLeafNodes ( rootNode ) ;

Kode yang disebutkan di atas berfungsi seperti ini:

  • Pertama, kelas “ simpul ” dibuat menggunakan konstruktor default untuk menambahkan node baru di pohon, seperti tautan yang dilakukan pada contoh di atas.
  • Selanjutnya, “ tampilanLeadNodes() ” fungsi dibuat yang menerima satu parameter “ rootNode ”. Parameter ini diperiksa untuk “ batal ” kondisi melalui “ jika ' penyataan.
  • Jika node yang diberikan tidak benar, maka “ kiri ' Dan ' Kanan ” node samping diperiksa untuk “ batal ' kondisi. Jika keduanya null, maka node tersebut akan diidentifikasi sebagai “ daun ” simpul dan dicetak di halaman web.
  • Setelah itu, lewati “ Kanan ' Dan ' kiri ” simpul dari “ rootNode ” ke “ tampilanLeafNodes() ' fungsi.
  • Alokasikan posisi setiap node dengan membuat instance menggunakan “ baru ” kata kunci dan “ simpul() ” konstruktor dan menentukan posisi sebagai parameter konstruktor.
  • kiri ” berarti posisi kiri dari simpul akar dan “ kiri.kiri ”posisi artinya kiri atau kiri. Pendekatan yang sama diterapkan dalam kasus “ Kanan ' Dan ' Kanan ”.
  • Akhirnya, lewati “ rootNode ” sebagai argumen untuk “ tampilanLeafNode() ' fungsi.

Keluaran yang dihasilkan menunjukkan bahwa simpul daun dicetak dengan arah kanan ke kiri.

Itu semua tentang mencetak semua simpul daun dari pohon biner ke segala arah yang diinginkan.

Kesimpulan

Untuk mencetak semua simpul daun dari pohon biner, buatlah kelas acak yang membuat dan memberikan nilai ke simpul pohon. Selanjutnya, buat fungsi acak yang menerima satu simpul pohon dalam hierarki atas ke bawah. Fungsi ini berisi beberapa “ jika ” kondisi yang memeriksa apakah “ simpul ” tidak kosong dan tidak memiliki node di “ kiri ' Dan ' Kanan ”, maka simpul tersebut dianggap sebagai “ daun ” node dan ditampilkan di konsol. Panduan ini telah menjelaskan prosedur pencetakan semua simpul daun pohon biner dari arah kiri ke kanan atau kanan ke kiri.