2010-08-20 11 views
10

Ön sipariş, sipariş ve sipariş sonrası ağaç geçiş algoritmalarını çok iyi anlıyorum. (Reference). Birkaç kullanımları anlıyorum: sıralı ikili ağaçların geçişi için sırayla, bir ağacı klonlamak için ön sipariş verin. Ama hayatım boyunca yapamayacağım post-order geçişe ihtiyaç duyacağım gerçek bir dünya görevi göremiyorum.Gerçek dünya sipariş öncesi/sonrası ağaç geçişi örnekleri

Bana bir örnek verebilir misiniz? Ve: ön sipariş geçişi için bana daha iyi kullanımlar verebilir misiniz?

Düzenleme: Herkes bana ifade ağaçları ve RPN dışında bir örnek verebilir mi? Bu gerçekten tüm sipariş sonrası için iyi mi?

+0

mükemmel soru! – Lazer

cevap

11

Topological sorting ağaç (ya da yönlendirilmiş asiklik grafikler) içindeki bir sonrası geçişine olup.

fikri grafiğin düğümleri görevleri temsil B için A bir kenar AB önce yapılması gereken olduğunu gösterir olmasıdır. Topolojik bir sıralama, bu görevleri bir görevin bütün bağımlılıkları görevin kendisinden daha önce göründüğü şekilde düzenler. UNIX make gibi herhangi bir sistem, bu algoritmayı uygulamak zorundadır. el ile bir bellek yönetimi ile bir ağaç tüm düğümler yok - -

Dario belirtilen bu örnek

bu sorunun örneğidir. Sonuçta, bir düğümü yok etme görevi çocuklarının yok olmasına bağlıdır.

+0

Bu harika bir cevap. Ağaçların dejenere olmuş grafikler olduğunu hatırlamak, her türlü işlevselliği ortaya çıkarır. Topolojik sıralama oldukça faydalıdır. – Plutor

+0

Neden topolojik sıralama, örneğin, zamanlama veya bir şey yerine, ya da bu bağlamda "Topolojik" ne demek gerekiyor? – Shawn

+0

@Shawn: Beni yener. Muhtemelen sadece grafiğin/ağın topolojisinin önemli olması. –

8

Sipariş emri derleyiciler tarafından kullanılmaktadır. a + b + c için bir ifade ağacı düşünün, makine dili a b + c + gibi bir dizi gerektirir. Buna Reverse polish Notation (RPN) denir. Vikipedi sayfasında şöyle der: "RPN aka Postfix" ön sipariş oluşturmak/onu klonlamak için gereklidir gibi

Sonrası düzen de, bir ağaç yok etmek için gereklidir.

+1

Bir ağaç tahrip etmek, bu iyi bir nokta. – Plutor

+0

+1 Ön siparişi kullanarak bir ağacı klonlayabiliyorsunuz ve ters sıralamayı yani postalama sırasını kullanarak imha edebileceksiniz. Sipariş öncesi/sonrası siparişin çok verimli olacağı bazı diğer alanlar olmalıdır. – Lazer

4

olarak Henk Holterman sonrası düzen geçişi genellikle manuel bellek yönetimini kullanarak bir ağaç olan yok, dikkat çekti.

yalancı kod:

destroy(node) { 
    if (node == null) return; 

    destroy(node.left) 
    destroy(node.right) 

    // Post-order freeing of current node 
    free(node) 
} 
İlgili konular