Geçenlerde (AVL, yayvan, treap) farklı ikili arama ağacı uygulamaları bir demet kadar kodlama ve bu yapıları çapraz için bir yineleyici yazmak için özellikle iyi yolu varsa merak ediyorum oldum. Şu an kullandığım çözüm standart bağlantılı liste yineleme için iterasyon azaltır ağacın sonraki ve önceki öğelerine BST mağaza işaretçiler her düğümü sahip olmaktır. Ancak, ben bu cevap gerçekten tatmin olmadım. İki işaretçiler (sonraki ve önceki) tarafından her düğümün alanı kullanımını arttırır ve bir bakıma sadece aldatıyor.
Ben daha sonra keşfetmek için sınır düğümler takip etmek için bir yığın kullanarak O (h ağacının yüksekliğidir) (h) Yardımcı depolama alanı kullanan bir ikili arama ağacı yineleyici kurmasının bir yol biliyor ama ben çünkü bellek kullanımı bu kadar kodlama direnmiş ettik. Sadece sabit alan kullanan bir yineleyici oluşturmak için birkaç yol var umuyordum.
aşağıdaki özelliklere sahip bir ikili arama ağacına üzerinde bir yineleyici tasarlamak için bir yol yoktur - Benim sorum şudur?
- Elemanlar (yani bir inorder geçişi) küçükten büyüğe ziyaret edilmektedir
next()vehasNext()sorgular O (1) zaman içinde çalışır.- Hafıza kullanımı O olduğu (1)
kolaylaştırmak için, ağaç yapısı yineleme (yani hiçbir ekleme, silme veya dönmeler) sırasında şekil değiştirme olmadığını varsayarsak gayet ama aslında bu ele verebilir bir çözüm olsaydı gerçekten harika olurdu.













