Υποθέτω είστε είτε κωδικοποίηση σε C ή C ++.
ένα. Ένας κόμβος, εάν η δομή ορίζεται ως εξής: struct node {κόμβο struct * αριστερά, δεξιά *? }? Μπορείτε να παρατηρήσετε ότι η δομή μπορεί να έχουν είτε 0, 1, ή 2 φύλλα. Έτσι, η μέγιστη είναι 2, min είναι 0 φύλλα.
ύψος b.Minimal είναι μηδέν, στην οποία θα περιέχει μόνο τον κόμβο ρίζας. Σημειώστε ότι ο κόμβος ρίζα δεν μετρά ως ένα ύψος 1. Είναι, επίσης, ονομάζεται βάθος κατά καιρούς. Εδώ είναι ένας αλγόριθμος για το ύψος:
int height(struct node *tree)
{
if (tree == NULL) return 0;
return 1 + max (height (tree->left), height (tree->right));
}
Διαβάστε περισσότερα: http://wiki.answers.com/Q/How_do_you_find_out_the_height_of_a_Binary_Search_Tree#ixzz1NIB17SkL
ντο. Συγγνώμη αν πάρω αυτό το worng τρόπο, αλλά υποθέτω αν χαρτογραφηθεί αυτό έξω σε ένα κομμάτι χαρτί, θα ήθελα να προσπαθούμε να βρούμε τον αριθμό των «δεσμών» που θα χρησιμοποιήσετε; Σε αυτή την περίπτωση, θα ήθελα απλώς να είναι ο αριθμός των κόμβων στο δέντρο -1 για τον κόμβο ρίζα. Αυτός ο αλγόριθμος που βρέθηκαν σε αυτή τη σελίδα http://forums.techarena.in/software-development/1147688.htm μπορεί να σας βοηθήσει: ελέγξτε αν ρίζα είναι μηδενική, τότε περνούν τα αριστερά και δεξιά κόμβους ως παράμετροι στην λειτουργία.
int countnodes(Node* root)
{
if (root == null || k<=0)
{
return 0;
} else {
return 1 + count(root.left,k-1) + count(root.right,k-1);
}
}
// remember to subtract one at the end.
int totalnodes = countnodes(root) - 1;
ρε. Η χρονική πολυπλοκότητα για καλύτερη περίπτωση είναι O (nlogn) όπου n είναι ο αριθμός των κόμβων για την εισαγωγή. Η χειρότερη περίπτωση, είναι O (n). Είναι άμεσα γραμμική.
Αν έχετε οποιεσδήποτε άλλες ερωτήσεις το google απλά, υπάρχουν πολλά πράγματα που πρέπει να ξέρετε για δυαδικά δέντρα αναζήτησης. Αλλά το μεγαλύτερο μέρος του είναι απλά αναδρομή που μπορείτε να μάθετε σε 30 δευτερόλεπτα.
Ελπίζω αυτό να βοηθήσει. Καλή τύχη στην εξέτασή σου! Το ορυχείο είχε πριν από λίγους μήνες. ?)