Πώς να εκτυπώσετε όλους τους κόμβους φύλλων ενός δυαδικού δέντρου από αριστερά προς τα δεξιά σε JavaScript;

Pos Na Ektyposete Olous Tous Kombous Phyllon Enos Dyadikou Dentrou Apo Aristera Pros Ta Dexia Se Javascript



Ένα δυαδικό δέντρο αποτελείται από πολλούς κόμβους που συνδέονται μέσω κορυφών, κάθε κόμβος μπορεί να συνδεθεί το πολύ με δύο θυγατρικούς κόμβους που είναι γνωστοί ως θυγατρικοί κόμβοι του. Αν το « κόμβος Το ” δεν έχει γονικό κόμβο, αλλά περιέχει μερικούς θυγατρικούς κόμβους που έχουν κόμβους εγγονιού, τότε είναι γνωστός ως “ ρίζα 'κόμβος. Ο κόμβος είναι ένα ' εσωτερικός ' κόμβος εάν έχει τον γονικό κόμβο και τον θυγατρικό κόμβο. Ο ' φύλλο Ο κόμβος έχει γονικό κόμβο, αλλά κανένας θυγατρικός κόμβος σημαίνει τους κόμβους που είναι το αδιέξοδο.

Η οπτική αναπαράσταση των εννοιών που συζητήθηκαν φαίνεται στο παρακάτω σχήμα:







Αυτός ο οδηγός εξηγεί τη διαδικασία εκτύπωσης όλων των κόμβων φύλλων ενός δυαδικού δέντρου καλύπτοντας τις παρακάτω ενότητες:



Πώς να αναγνωρίσετε τους κόμβους των φύλλων;

Ο ' φύλλο 'Οι κόμβοι είναι αυτοί που δεν έχουν θυγατρικούς κόμβους ή για να είμαστε συγκεκριμένοι που έχουν το ' ύψος 'του ' 0 '. Εάν ο κόμβος έχει ' ύψος ' μεγαλύτερος από ' 0 τότε αυτός ο κόμβος μπορεί να είναι ο εσωτερικός κόμβος ή ο ριζικός κόμβος. Ο ' φύλλο Οι κόμβοι συνήθως υποχωρούν για να προσδιορίσουν την αρχική πηγή από την οποία δημιουργείται αυτός ο κόμβος. Χρησιμοποιείται κυρίως σε αλγόριθμους αναζήτησης ή εύρεσης σφαλμάτων για την εύρεση της αιτίας ενός σφάλματος ή ενός προβλήματος.



Πώς να εκτυπώσετε όλους τους κόμβους φύλλων ενός δυαδικού δέντρου από αριστερά προς τα δεξιά σε JavaScript;

Υπάρχουν δύο προσεγγίσεις» αναδρομικός ' και ' επαναληπτικός ' για να επιλέξετε όλους τους κόμβους φύλλων που είναι διαθέσιμοι στο παρεχόμενο δυαδικό δέντρο στο επιθυμητό ' αριστερά ' προς την ' σωστά ' κατεύθυνση. Η πρακτική εφαρμογή αυτών των προσεγγίσεων παρουσιάζεται στις παρακάτω ενότητες:





Μέθοδος 1: Εκτύπωση όλων των κόμβων φύλλων ενός δυαδικού δέντρου από αριστερά προς τα δεξιά αναδρομικά

Η αναδρομική προσέγγιση επιλέγει όλους τους κόμβους στο a αλγόριθμος αναζήτησης πρώτου βάθους τρόπο που πρώτα διασχίζει ολόκληρους τους κόμβους της αριστερής πλευράς και στη συνέχεια τον μεσαίο κόμβο και τους κόμβους της δεξιάς πλευράς στο τέλος. Αυτή η λειτουργία εκτελείται αναδρομικά για κάθε κόμβο και όταν δεν υπάρχει περαιτέρω διέλευση του ' φύλλο Οι κόμβοι αναγνωρίζονται. Για να κατανοήσετε καλύτερα αυτήν την έννοια, επισκεφτείτε το παρακάτω απόσπασμα κώδικα:

τάξη Κόμβος
{
κατασκευαστής ( )
{
Αυτό . περιεχόμενο = 0 ;
Αυτό . αριστερά = μηδενικό ;
Αυτό . σωστά = μηδενικό ;
}
} ;

όπου εμφανίζονταιLeafNodes = ( rootNode ) =>
{
αν ( rootNode == μηδενικό )
ΕΠΙΣΤΡΟΦΗ ;

αν ( rootNode. αριστερά == μηδενικό && rootNode. σωστά == μηδενικό )
{
έγγραφο. γράφω ( rootNode. περιεχόμενο + '' ) ;
ΕΠΙΣΤΡΟΦΗ ;
}

αν ( rootNode. αριστερά != μηδενικό )
displayLeafNodes ( rootNode. αριστερά ) ;
αν ( rootNode. σωστά != μηδενικό )
displayLeafNodes ( rootNode. σωστά ) ;
}
ήταν sampleNode = ( val ) =>
{
ήταν tempNode = νέος Κόμβος ( ) ;
tempNode. περιεχόμενο = val ;
tempNode. αριστερά = μηδενικό ;
tempNode. σωστά = μηδενικό ;
ΕΠΙΣΤΡΟΦΗ tempNode ;
}
ήταν rootNode = provNode ( 3 ) ;
rootNode. αριστερά = provNode ( 6 ) ;
rootNode. σωστά = provNode ( 9 ) ;
rootNode. αριστερά . αριστερά = provNode ( 12 ) ;
rootNode. αριστερά . σωστά = provNode ( δεκαπέντε ) ;
rootNode. αριστερά . σωστά . σωστά = provNode ( 24 ) ;
rootNode. σωστά . αριστερά = provNode ( 18 ) ;
rootNode. σωστά . σωστά = provNode ( είκοσι ένα ) ;

displayLeafNodes ( rootNode ) ;

Η εξήγηση του παραπάνω μπλοκ κώδικα δηλώνεται παρακάτω:



  • Πρώτα, δημιουργήστε μια τάξη με το όνομα ' κόμβος ', που δημιουργεί έναν νέο κόμβο και ορίζει την τιμή του σε ' 0 '. Το συνημμένο ' αριστερά ' και ' σωστά Οι πλευρικοί κόμβοι έχουν οριστεί σε μηδενικό ” από προεπιλογή χρησιμοποιώντας τον κατασκευαστή κλάσης.
  • Στη συνέχεια, ορίστε ένα ' displayLeafNodes() ' συνάρτηση που δέχεται μία μόνο παράμετρο ' rootNode '. Αυτή η παραμετρική τιμή θεωρείται ως ο επί του παρόντος επιλεγμένος κόμβος ενός δυαδικού δέντρου.
  • Μέσα στη συνάρτηση, το ' αν Η δήλωση ' χρησιμοποιείται για να ελεγχθεί εάν η ' rootNode ” είναι μηδενικό ή όχι. Σε περίπτωση που ' μηδενικό Η περαιτέρω εκτέλεση σταμάτησε για αυτόν τον κόμβο. Στην άλλη περίπτωση, το rootNode ' αριστερά ' και ' σωστά Οι πλευρικοί κόμβοι ελέγχονται για μηδενικό '. Εάν και τα δύο είναι μηδενικά, η τιμή αυτού ' κόμβος ” εκτυπώνεται.
  • Αν το « αριστερά ' ή ' σωστά 'Ο κόμβος δεν είναι 'μηδενικός', μετά περάστε αυτήν την πλευρά του κόμβου στο ' displayLeafNodes() Συνάρτηση για την αναδρομική λειτουργία.
  • Ορίστε μια νέα συνάρτηση με το όνομα ' provNode() ' που δέχεται τη μοναδική παράμετρο ' val '. Μέσα στη συνάρτηση δημιουργήστε μια νέα παρουσία του ' Κόμβος 'τάξη με όνομα' tempNode '. Εκχωρήστε την παραμετρική « val 'ως αξία για την ιδιοκτησία της κατηγορίας' περιεχόμενο ' και ρυθμίστε το ' αριστερά ' και ' σωστά 'πλευρικοί κόμβοι προς' μηδενικό ' από προεπιλογή.
  • Τέλος, δημιουργήστε ένα αντικείμενο με το όνομα ' rootNode ' για το ' provNode() Συνάρτηση και περάστε την τιμή του κόμβου ως αυτή την παράμετρο συνάρτησης. Δημιουργήστε τους κόμβους της αριστερής και της δεξιάς πλευράς προσθέτοντας το ' αριστερά ' και ' σωστά ' λέξεις-κλειδιά με το 'rootNode' και εκχωρήστε τους αξία χρησιμοποιώντας την ίδια συνάρτηση ' provNode() '.
  • Ο ' αριστερά ' σημαίνει την αριστερή θέση του ριζικού κόμβου και το ' αριστερά.αριστερά 'Μέσα θέσης αριστερά αριστερά η ίδια προσέγγιση εφαρμόζεται στην περίπτωση ' σωστά ' και ' σωστά
  • Αφού ορίσετε το δέντρο, περάστε το 'rootNode' ως όρισμα για το ' displayLeadNodes() ” λειτουργία για επιλογή και εκτύπωση όλων των κόμβων φύλλων του δημιουργημένου δέντρου.

Η έξοδος που δημιουργείται μετά τη μεταγλώττιση επιβεβαιώνει ότι ο κόμβος φύλλου του παρεχόμενου δέντρου έχει ανακτηθεί και εκτυπωθεί στην κονσόλα:

Μέθοδος 2: Εκτύπωση όλων των κόμβων φύλλων ενός δυαδικού δέντρου χρησιμοποιώντας την επαναληπτική προσέγγιση

Ο ' επαναληπτικός 'Η προσέγγιση είναι η πιο αποτελεσματική προσέγγιση, χρησιμοποιεί την έννοια ' Σπρώξτε ' και ' κρότος ' για να επιλέξετε το ' φύλλο ” κόμβοι. Τα βασικά σημεία ή η λειτουργία αυτής της προσέγγισης αναφέρονται παρακάτω:

τάξη Κόμβος
{
κατασκευαστής ( αξία )
{
Αυτό . δεδομένα = αξία ;
Αυτό . αριστερά = μηδενικό ;
Αυτό . σωστά = μηδενικό ;
}
} ;

όπου εμφανίζονταιLeafNodes = ( rootNode ) =>
{
αν ( ! rootNode )
ΕΠΙΣΤΡΟΦΗ ;
ας λίστα = [ ] ;
λίστα. Σπρώξτε ( rootNode ) ;

ενώ ( λίστα. μήκος > 0 ) {
rootNode = λίστα [ λίστα. μήκος - 1 ] ;
λίστα. κρότος ( ) ;
αν ( ! rootNode. αριστερά && ! rootNode. σωστά )
έγγραφο. γράφω ( rootNode. δεδομένα + '' ) ;
αν ( rootNode. σωστά )
λίστα. Σπρώξτε ( rootNode. σωστά ) ;
αν ( rootNode. αριστερά )
λίστα. Σπρώξτε ( rootNode. αριστερά ) ;
}
}

ήταν rootNode = νέος Κόμβος ( 3 ) ;
rootNode. αριστερά = νέος Κόμβος ( 6 ) ;
rootNode. σωστά = νέος Κόμβος ( 9 ) ;
rootNode. αριστερά . αριστερά = νέος Κόμβος ( 12 ) ;
rootNode. αριστερά . σωστά = νέος Κόμβος ( δεκαπέντε ) ;
rootNode. αριστερά . σωστά . σωστά = νέος Κόμβος ( 24 ) ;
rootNode. σωστά . αριστερά = νέος Κόμβος ( 18 ) ;
rootNode. σωστά . σωστά = νέος Κόμβος ( είκοσι ένα ) ;

displayLeafNodes ( rootNode ) ;

Η επεξήγηση του παραπάνω κώδικα γράφεται παρακάτω:

  • Πρώτα, δημιουργήστε ένα ' Κόμβος 'κλάση που λαμβάνει μία μόνο παράμετρο' αξία ” που ορίζεται ως η τιμή του νεοδημιουργημένου κόμβου και η αριστερή και η δεξιά πλευρά ορίζονται σε null. Όπως ακριβώς έγινε στο παραπάνω παράδειγμα.
  • Στη συνέχεια, δημιουργήστε μια συνάρτηση ' displayLeafNodes() ' που δέχεται μία μόνο παράμετρο ' rootNode '. Αυτό το «rootNode» θεωρείται ως το δυαδικό δέντρο και ελέγχεται πρώτα το κενό του.
  • Εάν ο κόμβος δεν είναι κενός, τότε μια κενή λίστα με το όνομα ' λίστα ' δημιουργείται και το ' rootNode Η παράμετρος ' εισάγεται σε αυτό χρησιμοποιώντας το ' Σπρώξτε() μέθοδος.
  • Μετά το ' ενώ() 'χρησιμοποιείται το οποίο εκτελείται μέχρι το μήκος ενός ' λίστα '. Μέσα στον βρόχο, το στοιχείο που βρίσκεται στο κάτω μέρος ενός δέντρου ή ' λίστα Το ' αφαιρείται χρησιμοποιώντας το ' κρότος() μέθοδος.
  • Τώρα, η ύπαρξη του « αριστερά ' και ' σωστά Οι πλευρές του 'rootNode' ελέγχονται και αν δεν υπάρχουν και οι δύο πλευρές, σημαίνει ότι δεν έχει θυγατρικό κόμβο. Στη συνέχεια, αυτός ο κόμβος εμφανίζεται στην οθόνη και προσδιορίζεται ως κόμβος φύλλου.
  • Αν υπάρχει κόμβος στην αριστερή ή δεξιά πλευρά σημαίνει ότι έχει παιδιά. Μετά αυτό ' αριστερά ' και ' σωστά 'Ο κόμβος ωθείται στο ' λίστα ” για περαιτέρω λειτουργία εύρεσης του κόμβου φύλλου.
  • Στο τέλος, δημιουργήστε ένα προσαρμοσμένο δυαδικό δέντρο περνώντας τις τιμές του κόμβου ως παραμέτρους για το ' Κόμβος ” κατασκευαστής κλάσης. Μετά τη δημιουργία, περάστε το δέντρο 'rootNode' ως όρισμα για το ' displayLeafNodes() ' λειτουργία.

Η έξοδος που δημιουργείται μετά τη μεταγλώττιση δείχνει ότι οι κόμβοι φύλλων του παρεχόμενου δέντρου εκτυπώνονται:

Συμβουλή μπόνους: Εκτύπωση κόμβων φύλλων ενός δυαδικού δέντρου από δεξιά προς την αριστερή κατεύθυνση

Για να ανακτήσετε όλους τους κόμβους φύλλων που δεν έχουν θυγατρικούς κόμβους στο ' σωστά ' προς την ' αριστερά κατεύθυνση, η αναδρομική προσέγγιση είναι η πιο προτεινόμενη λόγω της ευκολίας της. Για παράδειγμα, το ίδιο δέντρο που συζητήθηκε στις παραπάνω ενότητες πρόκειται να χρησιμοποιηθεί για την ανάκτηση του κόμβου φύλλου αλλά στο ' σωστά ' στο ' αριστερά κατεύθυνση, όπως φαίνεται παρακάτω:

τάξη Κόμβος
{
κατασκευαστής ( αξία )
{
Αυτό . δεδομένα = αξία ;
Αυτό . αριστερά = μηδενικό ;
Αυτό . σωστά = μηδενικό ;
}
} ;


λειτουργία displayLeafNodes ( ρίζα )
{
αν ( ρίζα == μηδενικό )
{
ΕΠΙΣΤΡΟΦΗ ;
}

αν ( ρίζα. αριστερά == μηδενικό && ρίζα. σωστά == μηδενικό )
{
έγγραφο. γράφω ( ρίζα. δεδομένα + '' ) ;
ΕΠΙΣΤΡΟΦΗ ;
}
αν ( ρίζα. σωστά != μηδενικό )
{
displayLeafNodes ( ρίζα. σωστά ) ;
}
αν ( ρίζα. αριστερά != μηδενικό )
{
displayLeafNodes ( ρίζα. αριστερά ) ;
}
}


ήταν rootNode = νέος Κόμβος ( 3 ) ;
rootNode. αριστερά = νέος Κόμβος ( 6 ) ;
rootNode. σωστά = νέος Κόμβος ( 9 ) ;
rootNode. αριστερά . αριστερά = νέος Κόμβος ( 12 ) ;
rootNode. αριστερά . σωστά = νέος Κόμβος ( δεκαπέντε ) ;
rootNode. αριστερά . σωστά . σωστά = νέος Κόμβος ( 24 ) ;
rootNode. σωστά . αριστερά = νέος Κόμβος ( 18 ) ;
rootNode. σωστά . σωστά = νέος Κόμβος ( είκοσι ένα ) ;

displayLeafNodes ( rootNode ) ;

Ο παραπάνω κώδικας λειτουργεί ως εξής:

  • Πρώτον, η τάξη ' Κόμβος ” δημιουργείται που χρησιμοποιεί τον προεπιλεγμένο κατασκευαστή για να προσθέσει έναν νέο κόμβο στο δέντρο μόνο τη σύνδεση που έγινε στα παραπάνω παραδείγματα.
  • Στη συνέχεια, το « displayLeadNodes() Δημιουργείται η συνάρτηση που δέχεται μία μόνο παράμετρο του rootNode '. Αυτή η παράμετρος ελέγχεται για το ' μηδενικό ' συνθήκη μέσω του ' αν », δήλωση.
  • Εάν ο παρεχόμενος κόμβος δεν είναι αληθής, τότε είναι ' αριστερά ' και ' σωστά Οι πλευρικοί κόμβοι ελέγχονται για μηδενικό ' κατάσταση. Εάν και τα δύο είναι μηδενικά, τότε ο κόμβος θα αναγνωριστεί ως ' φύλλο » κόμβος και εκτυπώνεται στην ιστοσελίδα.
  • Μετά από αυτό, περάστε το ' σωστά ' και ' αριστερά 'κόμβοι του' rootNode ' στο ' displayLeafNodes() ' λειτουργία.
  • Εκχωρήστε τη θέση κάθε κόμβου δημιουργώντας τα στιγμιότυπα χρησιμοποιώντας το « νέος 'λέξη-κλειδί και το ' Κόμβος() ” κατασκευαστή και προσδιορίζοντας τη θέση ως παράμετρο κατασκευαστή.
  • Ο ' αριστερά ' σημαίνει την αριστερή θέση του ριζικού κόμβου και το ' αριστερά.αριστερά ” θέση σημαίνει αριστερά ή αριστερά. Η ίδια προσέγγιση εφαρμόζεται στην περίπτωση « σωστά ' και ' σωστά '.
  • Τέλος, περάστε το « rootNode 'ως επιχείρημα για το ' displayLeafNode() ' λειτουργία.

Η παραγόμενη έξοδος δείχνει ότι οι κόμβοι φύλλων εκτυπώνονται με κατεύθυνση από τα δεξιά προς τα αριστερά.

Αυτό αφορά την εκτύπωση όλων των κόμβων φύλλων ενός δυαδικού δέντρου προς οποιαδήποτε επιθυμητή κατεύθυνση.

συμπέρασμα

Για να εκτυπώσετε όλους τους κόμβους φύλλων ενός δυαδικού δέντρου, δημιουργήστε μια τυχαία κλάση που δημιουργεί και εκχωρεί τιμές στους κόμβους δέντρου. Στη συνέχεια, δημιουργήστε μια τυχαία συνάρτηση που δέχεται έναν μόνο κόμβο του δέντρου σε μια ιεραρχία από πάνω προς τα κάτω. Αυτή η συνάρτηση περιέχει πολλαπλές ' αν ' συνθήκες που ελέγχουν εάν το ' κόμβος Το ' δεν είναι κενό και δεν έχει κόμβους στο ' αριστερά ' και ' σωστά ' κατεύθυνση, τότε αυτός ο κόμβος θεωρείται ως ' φύλλο ' κόμβος και εμφανίζεται στην κονσόλα. Αυτός ο οδηγός έχει εξηγήσει τη διαδικασία εκτύπωσης όλων των κόμβων φύλλων ενός δυαδικού δέντρου από αριστερά προς τα δεξιά ή από δεξιά προς την αριστερή κατεύθυνση.