AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

AA tree - Skew und Split

Ein Thema von sk.Silvia · begonnen am 4. Dez 2006 · letzter Beitrag vom 4. Dez 2006
Antwort Antwort
Benutzerbild von sk.Silvia
sk.Silvia

Registriert seit: 8. Feb 2006
Ort: Slovenia
90 Beiträge
 
Delphi 7 Personal
 
#1

AA tree - Skew und Split

  Alt 4. Dez 2006, 16:41
cau, hat jemand von euch ein delphi source von Skew and Split?
konnte kein delphi source finden( und mein funkcionier nicht so gut...

Delphi-Quellcode:
   
    procedure TAA.Split;
    var tmp : TAA; begin
        tmp := TAA.CreateAATree(0);
        if ( not(Self = nil) and not(RightNode.isEmpty) and not(RightNode.RightNode.isEmpty)) then
            if(RightNode.RightNode.HeaderInfo.DepthLevel = HeaderInfo.DepthLevel) then begin
                tmp := RightNode; //sem to nechce vojst
                RightNode := tmp.LeftNode;
                tmp.LeftNode := Self;
                Self := tmp;
                inc(Self.HeaderInfo.DepthLevel);
            end;
    end;

    procedure TAA.Skew;
    var tmp : TAA; begin
        tmp := TAA.CreateAATree(0);
        if ( not(Self = nil) and not(LeftNode = nil)) then
            if (LeftNode.HeaderInfo.DepthLevel = HeaderInfo.DepthLevel) then begin
                tmp := RightNode;
                LeftNode := tmp.RightNode;
                tmp.RightNode := Self;
                Self := tmp; //sem to nechce vojst
            end;
    end;
Dankeschon
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: AA tree - Skew und Split

  Alt 4. Dez 2006, 18:01
Hallo Silvia,

dein Deutsch wird immer besser.

Der folgende Code ist meine Portierung des Arne Anderson Tree von Nic Roets - ausschnittsweise und ungetestet.

Delphi-Quellcode:
type
  PAATreeNode = ^TAATreeNode;
  TAATreeNode = record
    Parent, Left, Right: PAATreeNode;
    Level: Integer;
    Data: Integer;
  end;

procedure Skew(oldParent: PAATreeNode);
var
  node: PAATreeNode;
begin
  node := oldParent.Left;
  if oldParent.Parent.Left = oldParent
    then oldParent.Parent.Left := node
    else oldParent.Parent.Right := node;
  node.Parent := oldParent.Parent;
  oldParent.Parent := node;
  oldParent.Left := node.Right;
  if Assigned(oldParent.Left) then
    oldParent.Left.Parent := oldParent;
  node.Right := oldParent;
  if Assigned(oldParent.Left)
    then oldParent.Level := oldParent.Left.Level + 1
    else oldParent.Level := 1;
end;

function Split(oldParent: PAATreeNode): Boolean;
var
  node: PAATreeNode;
begin
  node := oldParent.Right;
  if Assigned(node) and Assigned(node.Right) and (node.Right.Level = oldParent.Level) then
  begin
    if oldParent.Parent.Left = oldParent
      then oldParent.Parent.Left := node
      else oldParent.Parent.Right := node;
    node.Parent := oldParent.Parent;
    oldParent.Parent := node;
    oldParent.Right := node.Left;
    if Assigned(oldParent.Right) then
      oldParent.Right.Parent := oldParent;
    node.Left := oldParent;
    node.Level := oldParent.Level + 1;
    Result := True;
  end else Result := False;
end;
Da du deine Klasse TAA nicht vorgestellt hast, musst du den Code selbst an deine Bedürfnisse anpassen.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf