Temel LeetCode algoritma problemi 47. gün: N-ary ağaç geçişi

Algoritmalar hakkında çok karışık olan 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 bunalıma girecek. Elbette Bunu yapamayabilirim, doğru.

Her soru için iki dilde, statik dil ve dinamik dilde çözüm vermeyi planlıyorum.

Uygulama dilleri olarak C dili, Python ve Java'yı seçiyorum.Kısıtlı alan nedeniyle, diğer dillerin uygulanmasıyla ilgilenen arkadaşlar, lütfen kendiniz deneyin.

LeetCode 429. N-ary Ağaç Seviyesi Sıra Geçişi

Sorun Açıklaması:

N-ary ağaç verildiğinde, düğüm değerinin geçişini döndür. (Yani, soldan sağa doğru katman katman çapraz).

Not:

  • Ağacın derinliği 1.000'i geçmeyecektir.
  • Ağaçtaki toplam düğüm sayısı 5000'i geçmeyecektir.
  • Misal:

    C ++ dil uygulaması:

    Ağaç hiyerarşisini geçmek için en geniş ilk algoritmayı kullanabiliriz.

    Ağacı geçmek için en geniş algoritma ile ilgili olarak, önceki soru "44. gün" deki java ve python uygulamasında ikili ağacın üzerinden geçmek için enine ilk algoritmayı kullandık.

    N-ary ağacı geçmek ile ikili ağaçtan geçmek arasında temel bir fark yoktur.

    Katman dizisi geçişi, "44. Gün" deki C ++ uygulamasına benzer şekilde özyinelemeli yöntemlerle de uygulanabilir.

    Bugün, bu sorunu çözdüğümüz tüm uygulamalar özyineleme ile uygulanmaktadır, çünkü bu uygulama kodu görece akıcı hale getirilmiştir. Enine ilk algoritmanın uygulanmasıyla ilgili olarak, bunu kendiniz yazmayı deneyebilirsiniz, herhangi bir sorunuz varsa, yorumlarda sorabilirsiniz.

    Kodun 1'den 6'ya kadar olan satırları optimize edilmiş kodlardır ve "19. Gün" de ayrıntılı olarak açıklanmıştır, bu yüzden onları buraya yazmayacağım.

    LevelOrder ana işlevinde, önce iki boyutlu bir res vektörü tanımlayın, ardından res'i doldurmak için doLevelOrder özel işlevini çağırın ve son olarak res döndür.

    DoLevelOrder işlevi 3 nesli kabul eder, ilki alt ağacın düğümü, ikincisi doldurulacak iki boyutlu vektör ve üçüncü parametre ise tüm ağaçtaki geçerli düğümün düzey sayısıdır.Seviye sayısının 0'dan başladığını kabul ediyoruz. .

    DoLevelOrder mantığı:

    Şu anda boş bir düğümse, doğrudan dönün. Mevcut düğüm boş bir düğüm değilse, val değerini listeye doldurmalıyız. Ancak bazen, doldurmak istediğiniz alt vektör listede henüz bulunmadığından, 12. satırda bir yargıya varırız. Şu anda, listeye boş bir vektör eklemeli ve sonra onu val ile doldurmalıyız.

    Son olarak, özyineleme tüm alt düğümlerinde gerçekleştirilir.Bunlar alt düğümler oldukları için, üçüncü parametre olan katman sayısı 1 artırılmalıdır.

    Python dilinin uygulanması:

    Python uygulaması da C ++ gibi özyineleme ile gerçekleştirilir.

    kod aşağıdaki gibi gösterilir:

    Java dilinin uygulanması:

    Java'nın gerçeklemesi de C ++ gibi özyineleme ile gerçekleştirilir.

    kod aşağıdaki gibi gösterilir:

    Cannesın "Film Satın Alma" nın Gizemini Çözmek: Çinli şirketler pazara çılgınca girerek yeni "Filarmoni Şehri" ni arıyor
    önceki
    Bir MPV istiyorsanız ve Alfa'yı karşılayamıyorsanız, neden bunlara bir göz atmıyorsunuz?
    Sonraki
    CIKM AnalytiCup 2018 şampiyon programı yayınlandı, model oluşturmadaki becerilerini görün
    Betta Balık Karnavalı'nın Gözlemi: Üç gün içinde 300.000 kişinin "canlı yayın + tema parkı" sularını test etmesi bekleniyor
    Bekar genç kadınlar için bir şölen | TVB'nin ilk on kadını evlenmeden nasıl yaşayabileceğinizi anlatıyor!
    Holden, Avustralya'daki üretim hattını kapattı
    Intranet uzaktan kumanda bilgisayarı, Sunflower Control A2'yi seçiyorum
    İyi bir aile geçmişine sahip, 7 yıldır eğlence sektörünün içindeydi, "Ördek Kralı" seçildi ve TVB dizisinde eve başarıyla girdi.
    "Wolf Warrior 2" telif hakkı anlaşmazlığı, hukuk ve "eski endüstri düzenlemeleri" arasında zorlu bir düello
    Kuru mallar deep Derin öğrenmede dengesiz veri setlerinin işlenmesi
    Space Look'a dönüşün ve Güç adidas Neo ile çıktı
    "OnePlus Fenomeni" ni yeniden ortaya çıkarmak OnePlus 6T Pop-up olayı, kuyrukta bir artışa neden oldu
    TVB senaryosu sırları mı gizler? Bu ilk on klasik eklenti karakteri aslında sizinle ilgili!
    Önce "Sparrow" ve ardından "Tianshu", TV dizisi "dip garantili dalga" ortaya çıktı ve sermaye, oynamanın yeni yollarını ekledi
    To Top