Algoritmalar hakkında çok karmaşık makaleler nasıl yazılır. Son olarak, yazmaya en basit seviyeden başlamanın daha iyi olacağını düşünüyorum. Başlangıçtan itibaren, yapay zeka, makine öğrenimi algoritmaları ve çok sayıda matematik ve optimizasyon bilgisi gibi bazı ağır ağırlıklara sahip olacağım. Sanırım çok bunaltıcı olacak. Bunu yapamayabilirim, doğru.
Her soruya iki dilde, bir statik dil ve bir dinamik dilde çözüm getirmeyi planlıyorum.
C dilini ve Python'u seçtim. Başlangıçta Java'yı düşündüm, ancak alan sınırlı. İlgileniyorsanız, kendiniz deneyin
LeetCode 589. Doğal Ağaç Ön Sipariş Geçişi
Ön sipariş geçişi ve sipariş sonrası geçiş temelde aynıdır ve fark temelde sıradır. Bir önceki makale olan "Temellerin Döşenmesi, LeetCode Algoritma Problemi 15. Gün, N-Ary Ağaçlarının Sıradan Geçişinden Sonra" makalesine bakmanızı ve bunları karşılaştırmanızı öneririm.Ağacın ön-sipariş ve son-sıra geçişi hemen hemen kontrol edilebilir.
Bir N-ary ağacı verildiğinde, düğümlerini önceki sırada geçiş yapmaya değer şekilde döndürün.
Lütfen yinelemeli olmayan bir uygulama yazın
dönüş:.
Bu sorunun bir C dili uygulaması sağlamasına gerek yoktur ve C kodunu gönderemiyorum. Bu yüzden uygulama dili olarak C ++ 'yı seçtim.
İlk olarak, LeetCode tarafından verilen ağaç düğümünün ilgili tanımı aşağıdaki gibidir:
Başlık elde etmek için yinelemeli olmayan bir yol gerektirse de, yine de bu arada yinelemeli bir şekilde de istiyorum.
1. Özyineleme yöntemi:
Özyineleme yöntemi çok basittir, sipariş sonrası geçiş koduyla hemen hemen aynıdır. Tek fark, ön sıralı geçişin önce düğümün değerini b vektörüne eklemek ve ardından alt düğümleri geçmek olmasıdır; sıra sonrası geçiş ise önce alt düğümleri geçmek ve sonra düğümün değerini vektör b'ye eklemektir. Sipariş sonrası geçişten farkı yalnızca sıradadır.
Özyinelemesiz ve sipariş sonrası geçiş kodu benzerdir. Yığın da kullanılır. Sipariş sonrası geçişten iki fark vardır:
Python'un uygulaması temelde C ++ 'ın özyinelemeli ve özyinelemeli olmayan yöntemler uygulamasıyla aynıdır. Tek fark dilin kendisinde yatıyor.
1. Özyineleme yöntemi:
2. Yinelemeli olmayan yöntem:
Burada, yığınlara alt düğümler eklemek için döngüler yerine dilimler kullanıyorum.