"We are back" « oc.at

suche Baum ausgabe Algorithmus ohne Rekursion

DerLuki 21.09.2006 - 16:04 704 4
Posts

DerLuki

Little Overclocker
Registered: Dec 2005
Location: Purbach
Posts: 89
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?
Bearbeitet von DerLuki am 21.09.2006, 16:08

ViennaLinux.at

Big d00d
Registered: Oct 2003
Location: A-1220 Wien
Posts: 211
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

Here to stay
Avatar
Registered: May 2002
Location: In da Oaschicht
Posts: 2567
hab kurz mal gegoogelt... vielleicht hilfts was
http://authors.aspalliance.com/mama...?p=sqlrecursive

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9822
ohne das jetzt zu studieren: schau dir mal nested sets an

Luzandro

Here to stay
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
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,..)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz