Example #1
0
    private void RbTreeRightRotate(RbTreeNode nodeY)
    {
        var nodeX = nodeY.Left;

        nodeY.Left = nodeX.Right;

        if (nodeX.Right != null)
        {
            nodeX.Right.Parent = nodeY;
        }

        nodeX.Parent = nodeY.Parent;

        if (nodeY.Parent == null)
        {
            _rbTreeRoot = nodeX;
        }
        else if (nodeY == nodeY.Parent.Right)
        {
            nodeY.Parent.Right = nodeX;
        }
        else if (nodeY == nodeY.Parent.Left)
        {
            nodeY.Parent.Left = nodeX;
        }

        nodeX.Right  = nodeY;
        nodeY.Parent = nodeX;
    }
Example #2
0
		/// <summary>
		/// Creates a node from field values.
		/// </summary>
		public RbTreeNode(object val, RbTreeNode parent, RbTreeNode left, RbTreeNode right, bool isRed) {
			Value = val;
			Parent = parent;
			Left = left;
			Right = right;
			IsRed = isRed;
		}
Example #3
0
 /// <summary>
 /// Creates a node from field values.
 /// </summary>
 public RbTreeNode(object val, RbTreeNode parent, RbTreeNode left, RbTreeNode right, bool isRed)
 {
     Value  = val;
     Parent = parent;
     Left   = left;
     Right  = right;
     IsRed  = isRed;
 }
Example #4
0
 private void RbTreeInsertFixUp(RbTreeNode item)
 {
     while (item != _rbTreeRoot && item.Parent.Colour == RbTreeColor.Red)
     {
         if (item.Parent == item.Parent.Parent.Left)
         {
             var nodeY = item.Parent.Parent.Right;
             if (nodeY is { Colour : RbTreeColor.Red })
Example #5
0
			public bool MoveNext() {
				if (_currentNode == null) {
					_currentNode = _tree.First;
				} else {
					_currentNode = _tree.Next(_currentNode);
				}

				return !_currentNode.IsNull;
			}
Example #6
0
            public bool MoveNext()
            {
                if (_currentNode == null)
                {
                    _currentNode = _tree.First;
                }
                else
                {
                    _currentNode = _tree.Next(_currentNode);
                }

                return(!_currentNode.IsNull);
            }
Example #7
0
    private void RbTreeInsert(int item)
    {
        var newItem = new RbTreeNode(item);

        if (_rbTreeRoot == null)
        {
            _rbTreeRoot        = newItem;
            _rbTreeRoot.Colour = RbTreeColor.Black;
        }
        else
        {
            RbTreeNode?nodeY = null;
            var        nodeX = _rbTreeRoot;
            while (nodeX != null)
            {
                nodeY = nodeX;
                nodeX = newItem.Data < nodeX.Data ? nodeX.Left : nodeX.Right;
            }

            newItem.Parent = nodeY;
            if (nodeY == null)
            {
                _rbTreeRoot = newItem;
            }
            else if (newItem.Data < nodeY.Data)
            {
                nodeY.Left = newItem;
            }
            else
            {
                nodeY.Right = newItem;
            }

            newItem.Left   = null;
            newItem.Right  = null;
            newItem.Colour = RbTreeColor.Red;

            RbTreeInsertFixUp(newItem);
        }
    }
Example #8
0
 public void Reset()
 {
     _currentNode = null;
 }
Example #9
0
			public void Reset() {
				_currentNode = null;
			}