eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingJak przeszukiwać drzewo z przerwami ? › Re: Jak przeszukiwać drzewo z przerwami ?
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!goblin3!goblin1!goblin.stu.neva.ru!feed.xsnews.nl!fbe001.ams.xsnews.nl
    !peer03.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neos
    trada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
    Content-Type: text/plain; charset=iso-8859-2; format=flowed; delsp=yes
    Newsgroups: pl.comp.programming
    Subject: Re: Jak przeszukiwać drzewo z przerwami ?
    References: <nf6stq$qmg$1@node2.news.atman.pl>
    Date: Wed, 20 Apr 2016 06:03:02 +0200
    MIME-Version: 1.0
    Content-Transfer-Encoding: Quoted-Printable
    From: "Jordan Szubert" <u...@j...us.to>
    Organization: HELL inc.
    Message-ID: <o...@a...mshome.net>
    User-Agent: Opera Mail/1.0 (Win32)
    Lines: 77
    NNTP-Posting-Host: 83.22.51.203
    X-Trace: 1461124983 unt-rea-a-02.news.neostrada.pl 22841 83.22.51.203:48623
    X-Complaints-To: a...@n...neostrada.pl
    X-Received-Bytes: 2898
    X-Received-Body-CRC: 2800204564
    Xref: news-archive.icm.edu.pl pl.comp.programming:209318
    [ ukryj 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: