public virtual bool Insert(int elem) { if (this.Search(elem)) { return(false); } TreeElement add = new TreeElement(elem); if (RootElement == null) { this.RootElement = add; } else if (elem < current.Value) { current.ChildLeft = add; } else { current.ChildRight = add; } return(true); }
protected void RotateLeft(TreeElement rotateUp) { /* grandParent grandParent * /|\ /|\ * rotateDown --> rotateUp * \ / * rotateUp rotateDown * / \ * a a */ TreeElement rotateDown = rotateUp.Parent; TreeElement grandParent = rotateDown.Parent; ParentNodeRelation parentRelation = rotateDown.ParentRelation; //Die eigentliche Rotation. Nur diese zwei Zeilen sind verschieden zur anderen Rotationsrichtung rotateDown.ChildRight = rotateUp.ChildLeft; rotateUp.ChildLeft = rotateDown; //Neue Wurzel des Teilbaumes wieder passend an den Elternknoten hängen bzw. als RootElement setzen if (parentRelation == ParentNodeRelation.LeftChild) { grandParent.ChildLeft = rotateUp; } else if (parentRelation == ParentNodeRelation.RightChild) { grandParent.ChildRight = rotateUp; } else if (parentRelation == ParentNodeRelation.Root) { this.RootElement = rotateUp; } }