Board index » delphi » AVL (Balanced) Binary Tree
Bruce Christensen
![]() Delphi Developer |
Wed, 18 Jun 1902 08:00:00 GMT
AVL (Balanced) Binary Tree
{.LW 132}
{*********************************************************************** * * * AVL.PAS * * * * Implements a structure and routines manipulate the balanced * * AVL tree. * * * * Modifications * * ============= * * * ***********************************************************************} {.L-} Unit AVL ; Interface Const Type BalanceSet = (Left_Tilt , Neutral , Right_Tilt) ; AVLDataRec = Record AVLPtr = ^AVL_Tree_Rec ; AVL_Tree_Rec = Record TreeRecArray = Array[1..Max_Tree_Nodes] of AVLDataRec ; Function Search_AVLTree(Var Root : AVLPtr ; Function Search( Root : AVLPtr ; Procedure AVLSort_To_Array(Var Root : AVLPtr ; Function Find_AVLNode(Var Root : AVLPtr ; Procedure Delete_AVLTree(Var Root : AVLPtr ; Implementation Procedure Rotate_Right(Var Root : AVLPtr) ; Begin { Rotate_Right } If Ptr3^.Balance = Left_Tilt then If Ptr3^.Balance = Right_Tilt then Root := Ptr3 ; Root^.Balance := Neutral ; End ; { Rotate_Right } Procedure Rotate_Left(Var Root : AVLPtr) ; Begin { Rotate_Left } If Ptr3^.Balance = Right_Tilt then If Ptr3^.Balance = Left_Tilt then Root := Ptr3 ; Root^.Balance := Neutral ; End ; { Rotate_Left } Procedure Insert_AVL(Var Root : AVLPtr ; InsertedOK := True ; Neutral : Root^.Balance := Left_Tilt ; Right_Tilt : Begin Neutral : Root^.Balance := Right_Tilt ; Right_Tilt : Begin End ; { Insert_AVL } Procedure Insert_AVLTree(Var Root : AVLPtr ; Begin { Insert_AVLTree } {*********************************************************************** Function Search( Root : AVLPtr ; {*********************************************************************** Function Search_AVLTree(Var Root : AVLPtr ; While Root <> Nil do {*********************************************************************** PROCEDURE Traverse_Tree(Var Root : AVLPtr ; {*********************************************************************** Procedure AVLSort_To_Array(Var Root : AVLPtr ; { In-order traverse of the tree. } Function Find_AVLNode(Var Root : AVLPtr ; Begin { Find_AVLNode } While (Root <> Nil) and No_Match do Find_AVLNode := Root ; Procedure Balance_Right(Var Root : AVLPtr ; Balnc2 , Begin { Balance_Right } Neutral : Begin Right_Tilt : Begin Root := Ptr2 ; If Balnc3 = Left_Tilt then If Balnc3 = Right_Tilt then Procedure Balance_Left(Var Root : AVLPtr ; Balnc2 , Begin { Balance_Left } Neutral : Begin Right_Tilt : Begin { Right_Tilt } Root := Ptr2 ; If Balnc3 = Right_Tilt then If Balnc3 = Left_Tilt then Root := Ptr3 ; Procedure Delete_Both_Children(Var Root , Procedure Delete_AVL(Var Root : AVLPtr ; Begin { Delete_AVL } Dispose(Ptr) ; Procedure Delete_AVLTree(Var Root : AVLPtr ; Delete_AVL(Root , X , DelOK) ; Begin { AVL_Tree } |