eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak przeszukiwać drzewo z przerwami ?Re: Jak przeszukiwać drzewo z przerwami ?
  • Data: 2016-04-20 06:03:02
    Temat: Re: Jak przeszukiwać drzewo z przerwami ?
    Od: "Jordan Szubert" <u...@j...us.to> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dnia 20-04-2016 o 05:26:49 Borneq <b...@a...hidden.pl> napisał(a):

    > Większość operacji na drzewie robi się rekurencyjnie. Tak jak na
    > przykład wypisanie wszystkich znalezionych ciągów.
    > Wypisz(root) woła Wypisz(1), Wypisz(2)...
    > Ale teraz chcę zrobić coś takiego:
    > Control+F ma znaleźć pierwsze wystąpienie ciągu, (np. przeszukiwanie w
    > rejestrach lub jakimkolwiek innym drzewie z danymi) i stanąć na
    > znalezionym węźle, niezależnie jak zagłębiony.
    > Naciskając F3 zaczynamy od tego węzła i dalej szukamy.
    > Chyba trzeba zrobić sztuczny stos na liście (wektorze, chodzi mi ogólnie
    > C++, a zwłaszcza teraz o C#) zamiast rekurencji.
    > Jak to wykonać? W C#

    w C# kompilator zrobi za ciebie sporo roboty:

    public class Node : IEnumerable<Node> {
    public string Name;
    public List<Node> Children = new List<Node>();
    public IEnumerator<Node> GetEnumerator() {
    yield return this;
    foreach(var c in Children) {
    foreach(var e in c) {
    yield return e;
    }
    }
    }
    System.Collections.IEnumerator
    System.Collections.IEnumerable.GetEnumerator() {
    return this.GetEnumerator();
    }
    }
    IEnumerator<Node> lastSearch = null;
    Node ControlF(Node root, string needle) {
    {
    var td = lastSearch as IDisposable;
    if(td != null) {
    td.Dispose();
    }
    }
    lastSearch = root.Where(n => n.Name == needle).GetEnumerator();
    if(lastSearch.MoveNext()) {
    //has at least one result
    return lastSearch.Current;
    } else {
    //nothing found
    return null;
    }
    }
    Node F3() {
    if(lastSearch == null) {
    return null;
    }
    if(!lastSearch.MoveNext()) {
    //no more results
    return null;
    } else {
    return lastSearch.Current;
    }
    }

    //nie testowalem, moga byc bledy

    --
    Jordan Szubert
    skype:jordanszubert

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: