Dalam traversal non -resursif melintasi prelude, medium, dan post -order, post -order adalah yang paling merepotkan. disimpan di tumpukan.
Ada banyak metode.
Salin kode kode sebagai berikut:
Typedef struct {node * p;
LastOrderTraverse (bitree bt) {
// Pertama, mulailah dari simpul root, pergi ke kiri bawah, pergi ke kepala, dan masukkan setiap node di jalur ke tumpukan.
p = bt;
While (bt)
push (bt, 0); // dorong ke tumpukan dua informasi, satu adalah pointer node, dan yang lainnya adalah apakah simpul yang tepat telah diakses
bt = bt.lchild;
}
// Kemudian masukkan tubuh siklus
While (! Stack.empty ()) {// selama tumpukan tidak kosong
sn = stack.gettop (); // sn adalah simpul teratas dari tumpukan
// Perhatikan, setiap simpul n, selama ia memiliki anak kiri, setelah N memasuki tumpukan, anak kiri N harus mengikuti tumpukan (ini tercermin pada paruh kedua algoritma), jadi ketika kita mendapatkan Tumpuk ketika elemen teratas, Anda dapat yakin bahwa elemen ini tidak memiliki anak kiri atau anak kirinya telah diakses, jadi pada saat ini kami tidak peduli dengan anak kirinya, kami hanya peduli dengan anak yang tepat.
// Jika anak yang tepat telah diakses, atau elemen tidak memiliki anak yang tepat, definisi traversal post -sequential dapat dilalui.
if (! sn.p.rchild || sn.rvisited) {{
p = pop ();
Kunjungi (P);
}
Lain // Jika anak yang tepat ada dan rvisited adalah 0, itu berarti bahwa anak yang tepat yang belum pindah belum dipindahkan sebelumnya, jadi dia akan berurusan dengan anak yang tepat.
{{
// Pada saat ini, kita harus pergi ke kiri bawah dari simpul anak yang tepat sampai akhir, dan untuk meletakkan semua node di jalur ini ke dalam tumpukan.
// Tentu saja, atur rvisited dari simpul ke 1 sebelum memasuki tumpukan, karena tumpukan anak yang tepat berarti bahwa anak yang tepat akan diakses sebelumnya (ini dipahami dengan baik karena kami selalu mengikuti dari pengamatan, ambillah. elemen tumpukan untuk dikunjungi). Dapat dilihat bahwa ketika elemen berada di atas tumpukan, anak yang tepat harus dilewati oleh kunjungan, sehingga rvisited dapat diatur ke 1 di sini.
sn.rvisited = 1;
// Pergi ke ujung ke kiri bawah dan letakkan semua elemen di jalan setapak ke dalam tumpukan
p = sn.p.rchild;
While (p! = 0) {
push (p, 0);
p = p.lchild;
}
} // Siklus ini telah berakhir.
}
}