ΠάρηςΓ Δημοσ. 9 Ιουνίου 2009 Δημοσ. 9 Ιουνίου 2009 Γεια σας παίδες... Δε θέλω να σας ζαλίσω και μπορει να μη σας ενδιαφέρει αυτο το θέμα τόσο... Εχω γραψει κώδικα ωστε να κάνει ενδοδιατεταγμένη διαταξη σε ενα δέντρο. Οπως ξερετε η κλασική λύση με αναδρομή ειναι inorder(node) { inorder(leftnode) visit() gorigth(rightnode) } Όμως επρεπε να το υλοποιήσω χωρις αναδρομή..Σιγουρα υπάρχουν πολλοί τροποι.... Αλλα να σημειώσω οτι για βοηθεια εχω οτι το δεντρο ειναι Threaded..Δηλαδή οι κομβοι που δεν εχουν αλλο κομβο δεξια δειχνουν στον αμέσως επόμενο συμφωνα με την ενδοδιατεταγμένη διαταξη. ΦΩΤΟ Οπου και αν εψαξα δεν βρηκα κωδικα να υλοποιει τη λύση χωρις καποια βοηθητική λίστα (stack ) κτλ... Ομως εγω το εκανα απλα με μια μεταβλητη bool. > void ThreadedBTree<int>::output() { bool BLOCK=false,visited=false; ThreadedBTreeNode<int> *p=root; while(true) { [b]ΠΑΜΕ ΑΡΙΣΤΕΡΑ ΜΕΧΡΙ ΟΣΟ ΠΑΕΙ[/b] while(p->leftChild && !BLOCK) { p=p->leftChild; } ΜΕΤΑ ΔΕΙΞΕ ΤΟ ΣΤΟΙΧΕΙΟ std::cout << p->data << " "; if(p==root) visited=true; ΕΔΩ ΕΑΝ ΜΑΣ ΠΑΕΙ ΠΙΣΩ ΘΕΤΟΥΜΕ BLOCK=true ΩΣΤΕ ΝΑ ΜΗΝ ΚΟΙΤΑΞΟΥΜΕ ΠΑΛΙ ΑΡΙΣΤΕΡΑ ΑΦΟΥ ΘΑ ΓΥΡΙΖΟΥΜΕ if(p->thread==true) BLOCK=true; else BLOCK=false; p=p->rightChild; [b]ΕΔΩ ΕΛΕΓΧΟΙ ΓΙΑ ΤΟ ΠΟΤΕ ΠΡΕΠΕΙ ΝΑ ΣΤΑΜΑΤΙΣΟΥΜΕ [/b] if(p==root && p->rightChild==root) { std::cout << p->data << " "; return; } else if(p==root) { BLOCK=false; if(visited) return; std::cout << p->data << " "; p=p->rightChild; visited=true; } } } Ο κωδικας δουλεύει απλα δεν ξερω εαν δε δουλέψει σε καποια περιπτωση..Οποιος μπορει ας HELP και ευχαριστώ..
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.