Exemple #1
0
        private FindNodeResult FindNode(T infoToFind)
        {
            FindNodeResult result = new FindNodeResult {
                parent = null, foundNode = root
            };
            bool foundInfo = false;

            while (!foundInfo && result.foundNode != null)
            {
                var compareResult = infoToFind.CompareTo(result.foundNode.info);
                if (compareResult > 0)
                {
                    result.parent    = result.foundNode;
                    result.foundNode = result.foundNode.right;
                    result.direction = FindDirection.Right;
                }
                else if (compareResult < 0)
                {
                    result.parent    = result.foundNode;
                    result.foundNode = result.foundNode.left;
                    result.direction = FindDirection.Left;
                }
                else
                {
                    foundInfo = true;
                }
            }

            return(result);
        }
Exemple #2
0
        private FindNodeResult GetRightLeftMostNode(BinaryTreeNode startNode)
        {
            FindNodeResult retValue = new FindNodeResult {
                parent = null, foundNode = startNode
            };

            if (startNode == null)
            {
                throw new ArgumentNullException("Invalid starting node.");
            }

            retValue.foundNode = startNode.right;
            retValue.parent    = startNode;
            retValue.direction = FindDirection.Right;

            while (retValue.foundNode.left != null)
            {
                retValue.parent    = retValue.foundNode;
                retValue.foundNode = retValue.foundNode.left;
                retValue.direction = FindDirection.Left;
            }

            return(retValue);
        }
Exemple #3
0
        public void Remove(T infoToRemove)
        {
            FindNodeResult findResult = FindNode(infoToRemove);
            var            foundNode  = findResult.foundNode;

            if (foundNode == null)
            {
                throw new InformationNotFoundException();
            }

            if (foundNode.left == null && foundNode.right == null)
            {
                if (findResult.parent != null)
                {
                    if (findResult.direction == FindDirection.Left)
                    {
                        findResult.parent.left = null;
                    }
                    else
                    {
                        findResult.parent.right = null;
                    }
                }
                else
                {
                    root = null;
                }
            }
            else if (foundNode.left == null)
            {
                if (findResult.direction == FindDirection.Left)
                {
                    findResult.parent.left = foundNode.right;
                }
                else
                {
                    findResult.parent.right = foundNode.right;
                }
            }
            else if (foundNode.right == null)
            {
                if (findResult.direction == FindDirection.Left)
                {
                    findResult.parent.left = foundNode.left;
                }
                else
                {
                    findResult.parent.right = foundNode.left;
                }
            }
            else
            {
                var leftMostResult = GetRightLeftMostNode(foundNode);
                foundNode.info = leftMostResult.foundNode.info;
                if (leftMostResult.direction == FindDirection.Left)
                {
                    leftMostResult.parent.left = null;
                }
                else
                {
                    leftMostResult.parent.right = null;
                }
            }
        }
 public FindNodeResponse(FindNodeResult <string> FindNodeResult)
 {
     this.FindNodeResult = FindNodeResult;
 }