Jak skonstruować drzewo, biorąc pod uwagę jego kolejność w przedsprzedaży i przedpremierowy? Po prostu szukam skutecznego algorytmu.Skonstruuj drzewo
Odpowiedz
rażące kopiowania i wklejania z Sun's (Oracle now, I guess...) forum:
Pytanie:
Czy ktoś może mi pomóc w jaki sposób skonstruować drzewo binarne z Inorder i postorder z przechodzenia, chcę tylko wiedzieć algorytm tak że mogę go zastosować.Odpowiedź:
Niechp_1
,p_2
...
p_n
być przechodzenie postorder i niechi_1
,i_2
...
i_n
być przechodzenie inorder. Z przechodzenia przez pocztę wiemy, że korzeniem drzewa jestp_n
. Znajdź ten element w nieprzekraczalnej kolejności, na przykład:i_1
,i_2
...
i_k-1
p_n
i_k+1
...
i_n
. Z przechodzenie inorder znaleźć wszystkie tji_1
,i_2
...
i_k-1
aw prawym poddrzewie, tji_k+1
...
i_n
odpowiednio elementy w lewym poddrzewie,.Usuń element
p_n
(i elementi_k
==
p_n
). Znajdź skrajną prawą elementup_j
wp_1
,p_2
...
p_j
...
p_n-1
gdziep_j
jest elementemi_1
,i_2
...i_k-1
. To jest korzeń lewego poddrzewu oryginalnego drzewa. Podziałp_1
,p_2
...
p_j
ip_j+1
...p_n-1
ii_1
,i_2
...
i_k-1
ii_k+1
...
i_n
. Teraz masz dwie podsekwencje reprezentujące pocztowe i nieruchome przejście dwóch drzewek drzewa oryginalnego .
Autor: JosAH.
Zaimplementowałam algorytm po wykonaniu instrukcji Jos'a i działał idealnie!
Za mało czasu zajmuje znalezienie najbardziej prawego elementu p_j w p_1 ~ p_n-1, gdy jest on również w i_1 ~ i_k-1. Zajmuje czas O (n^2). Właściwie po usunięciu p_n i znalezieniu jego pozycji w i_1 ~ i_n. Znamy już pozycję p_j. Dzieje się tak, ponieważ znamy już liczbę węzłów w lewym i prawym poddrzewie, które można uzyskać przez zliczanie elementów po p_n w i_1 ~ i_n. Dzięki temu możemy łatwo znaleźć miejsce do podziału p_1 ~ p_n-1 – ibread
Ponieważ to praca domowa, nie udzielę ci pełnej odpowiedzi, ale mam nadzieję, że wystarczy, abyś się przeprowadził.
Wyobraź sobie, że masz przedsprzedaż w przedsprzedaży, np. this.
Przejście daje 2-7-2-6-5-11-5 ... itd. Zwróć uwagę, że 5 jest właściwie właściwym dzieckiem korzenia.
Oczywiście, nie można tego stwierdzić po prostu patrząc na liczby, więc albo zostaniesz poinformowany o strukturze drzewa, albo musisz przechowywać dodatkowe dane (np. Czy węzeł jest po lewej stronie dziecko lub prawe dziecko, na przykład).
Parsowanie drzewa to po prostu funkcja rekursywna, która przejmuje preorder jako wejście (pomyśl o swoim zasięgu podczas przekazywania sygnału wejściowego). Jak już wspomniałem wcześniej, Twoje wstępne przejście powinno zawierać dodatkowe dane.
Wydajność:
rozważyć, ile razy każdy węzeł jest odwiedzana podczas budowania tego drzewa, ale również rozważyć operację odczytu wejścia. Czy istnieje sposób na reorganizację danych wejściowych szybciej niż można zbudować drzewo? Jaką strukturę musiałbyś użyć, jeśli potrzebujesz manipulować danymi.
W Porządku: Będziesz potrzebować tego samego pomysłu, aby przejść przez to, więc nie będę go omawiać. Jestem pewien, że ktoś inny będzie, jeśli jesteście zdesperowani.
- 1. Przyspiesz php :: PDO -> __ skonstruuj
- 2. Kiedy wybrać drzewo RB, drzewo B lub drzewo AVL?
- 3. Skonstruuj na miejscu obiekt nieusuwalny na mapie
- 4. Efektywnie skonstruuj GRanges/IRanges z Rle wektorowego
- 5. Elegancki foreach - inaczej skonstruuj w Razor
- 6. Skonstruuj oryginalny ciąg z uszkodzonego ciągu znaków
- 7. Skonstruuj ręczną legendę dla skomplikowanej fabuły
- 8. Skonstruuj listę z serii wyrażeń w Scali
- 9. Czy drzewo binarne zawiera inne drzewo?
- 10. Skonstruuj kwerendę GroupBy LINQ przy użyciu drzew wyrażeń
- 11. Jak utworzyć drzewo binarne
- 12. Jak głęboko skopiować drzewo?
- 13. Skorumpowane drzewo git?
- 14. rozbudowy Drzewo Lista menu
- 15. Buduj drzewo binarnej ekspresji
- 16. Serializować prefiks drzewo
- 17. C# - Proste drzewo binarne
- 18. Drzewo zależności pakietów Python
- 19. Drzewo w scala huśtawka
- 20. Drzewo rankingowe w C++
- 21. Haskell polimorficzne Drzewo Suma
- 22. One linię realizacja drzewo
- 23. Drzewo kwadratowe d3js
- 24. Wydrukuj drzewo wyników pyparsingu
- 25. Drzewo binarne Pierwsze wyszukiwanie
- 26. Drzewo kategorii Admin Magento
- 27. Jackson analizowania odpowiedzi drzewo
- 28. Sitecore Drzewo Content Architecture
- 29. Podejdź drzewo katalogów
- 30. Skonstruuj XML z dynamiczną etykietą i atrybutami w Scali?
Cóż, rekurencyjnie. Mam nadzieję, że nie jesteś moim uczniem. –
Potrzebuję wyjaśnienia. Jaki jest format danych wejściowych? Czy drzewo jest zrównoważone? Co rozumiesz przez sprawność (Ordo (x) lub po prostu "nie strasznie szalony"). Jaką strukturę chcesz zbudować? Drzewo jako obiekty połączone lub drzewo za pomocą tablicy. – ron
http://forums.devshed.com/software-design-43/finding-binary-tree-from-inorder-and-preorder-traversals-151147.html – Heinzi