suche Baum ausgabe Algorithmus ohne Rekursion

Seite 1 von 1 - Forum: Applications, Apps & Drivers auf overclockers.at

URL: https://www.overclockers.at/applications/suche_baum_ausgabe_algorithmus_ohne_rekursion_169037/page_1 - zur Vollversion wechseln!


DerLuki schrieb am 21.09.2006 um 16:04

habe folgendes problem

Tabelle Tier
(TNr, Vater, Mutter) ....inserts:
(1,null,null)
(2,null,null)
(3,1,2)
(4,1,2)
(5,1,2)
(6,4,5) .... bin mir der inzucht im klaren :)
(7,4,3).... und das Tier 4 Tier 5 mit Tier 3 betrügt

muss jetzt eine stored procedure(am SQL Server) schreiben die mit dem Aufruf:

exec Stammbaum 7
folgendes ausgibt:

Tier 7
Vater 4
Mutter 3
----
Tier 4
Vater 1
Mutter 2
----
Tier 3
Vater 1
Mutter 2
---
Tier 1
Kein Vater mehr angegeben ENDE
Keine Mutter mehr angegeben ENDE
---
Tier 2
Kein Vater mehr angegeben ENDE
Keine Mutter mehr angegeben ENDE
---
Tier 1
Kein Vater mehr angegeben ENDE
Keine Mutter mehr angegeben ENDE
---
Tier 2
Kein Vater mehr angegeben ENDE
Keine Mutter mehr angegeben ENDE


Rekursiv funktioniert das schon ganz wunderbar mit folgenden Algorithmus:

create procedure eltern_ausgeben(@TNr int)
as
begin
set nocount on
declare @Vater int
declare @Mutter int
declare @Art varchar(128)
declare @G char(1)
declare @gebdat datetime

Select @gebdat = GebDat,@G = Geschlecht,@Art = Name,@Vater = Vater, @Mutter = Mutter from Tier where TNr = @TNr
print 'Tier ' + cast(@TNr as varchar(5)) + ',' + @Art + ',' + @G + ', geboren am ' + cast (@gebdat as varchar(20))
print ' Vater: Tier ' + cast(@Vater as varchar(5))
print ' Mutter: Tier ' + cast(@Mutter as varchar(5))
if not @Vater is null
begin
exec eltern_ausgeben @Vater
end
if not @Mutter is null
begin
exec eltern_ausgeben @Mutter
end
end
go

----

Brauche aber einen Algorithmus um die sache per schleife auszugeben! mit einer Temporären Tabelle und einer Stored Function! Freeks gefragt! Danke! ist es überhaupt möglich einen Baum NICHT rekursiv abzuarbeiten?


ViennaLinux.at schrieb am 21.09.2006 um 16:20

Ja dies ist möglich. Studiere Informatik auf der TU Wien.
Dort haben wir "Algorithmen und Datenstrukturen 1" gehabt.
War eine "Fleißaufgabe" in der Übung - Habs selber ned gemacht damals, weil ich:
1) Nicht gerne codes schreibe (schon gar ned an der Tafel) und
2) weil ichs für ABSOLUT unnötig erachte!

Hab das Skript ned hier. Suchs mal im Wikipedia oder so


Lobo schrieb am 21.09.2006 um 16:49

hab kurz mal gegoogelt... vielleicht hilfts was
http://authors.aspalliance.com/mama...?p=sqlrecursive


ica schrieb am 21.09.2006 um 17:09

ohne das jetzt zu studieren: schau dir mal nested sets an


Luzandro schrieb am 22.09.2006 um 10:03

Nur so nebenbei: kann mir nicht vorstellen, dass deine Funktion tatsächlich diese Ausgabe liefert, denn die Rekursion ist eine Tiefensuche (zuerst immer den Vater-Pfad entlang), während die Ausgabe eine Breitensuche ist (Generation 1,2,3,..)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026