Exemple #1
0
        /// <summary>Gets the In-Order successor of the node passed.</summary>
        /// <param name="node">The node.</param>
        /// <returns></returns>
        public BinarySearchTreeNode <T> InOrderSuccessor(BinarySearchTreeNode <T> node)
        {
            if (node == null)
            {
                return(null);
            }
            if (node.Right != null)
            {
                return(GetLeftMost(node.Right));
            }

            var successor = node.Parent;

            while (successor != null && node == successor.Right)
            {
                node      = successor;
                successor = successor.Parent;
            }

            return(successor);
        }
Exemple #2
0
        /// <summary>Gets the In-Order predecessor of the node passed.</summary>
        /// <param name="node">The node.</param>
        /// <returns></returns>
        public BinarySearchTreeNode <T> InOrderPredecessor(BinarySearchTreeNode <T> node)
        {
            if (node == null)
            {
                return(null);
            }

            if (node.Left != null)
            {
                return(GetRightMost(node.Left));
            }

            var predecessor = node.Parent;

            while (predecessor != null && node == predecessor.Left)
            {
                node        = predecessor;
                predecessor = predecessor.Parent;
            }

            return(predecessor);
        }
Exemple #3
0
 /// <summary>Adds the child.</summary>
 /// <param name="item">The item.</param>
 /// <param name="parent">The parent.</param>
 /// <returns></returns>
 private BinarySearchTreeNode <T> AddChild(T item, BinarySearchTreeNode <T> parent)
 => new BinarySearchTreeNode <T>(item, parent);