Ejemplo n.º 1
0
        /// <summary>
        ///Recherche du noeud qui succéde au noeud présent
        /// </summary>
        /// <param name="a">Tree</param>
        /// <returns>Le noeud qui succéde le noeud entrant</returns>
        public static Tree TreeSearchSuccessor(Tree a)
        {
            if (a == null)
            {
                return(null);
            }
            if (a.Right != null)
            {
                return(Tree.TreeMinimumValue(a.Right));
            }
            Tree b = a.Parent;

            while ((b != null) && (a == b.Right))
            {
                a = b;
                b = b.Parent;
            }
            return(b);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Efface le noeud puis réorganise le Tree
        /// </summary>
        /// <param name="treeBase">Tree</param>
        /// <param name="valToDelete">Valeur à effacer</param>
        /// <returns>Le nouvel arbre</returns>
        public static Tree RemoveNode(Tree treeBase, int valToDelete)
        {
            if (treeBase == null)
            {
                return(treeBase);
            }

            if (valToDelete < treeBase.Value)
            {
                treeBase.Left = RemoveNode(treeBase.Left, valToDelete);
            }
            else if (valToDelete > treeBase.Value)
            {
                treeBase.Right = RemoveNode(treeBase.Right, valToDelete);
            }
            else
            {
                // Noeud avec un enfant ou sans enfant
                if (treeBase.Left == null)
                {
                    return(treeBase.Right);
                }
                else if (treeBase.Right == null)
                {
                    return(treeBase.Left);
                }

                //Noeud avec 2 enfants , recherche du neoud le plus petit
                Tree Temp = Tree.TreeMinimumValue(treeBase.Right);
                treeBase.Value = Temp.Value;

                //Efface le successeur dans l'ordre
                treeBase.Right = RemoveNode(treeBase.Right, treeBase.Value);
            }

            return(treeBase);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Remove d'une valeur pour le Tree courant
        /// </summary>
        /// <param name="valToDelete">Valeur à effacer</param>
        /// <returns></returns>
        public Tree RemoveValueInTree(int valToDelete)
        {
            if (this == null)
            {
                return(this);
            }

            if (valToDelete < this.Value)
            {
                this.Left = RemoveNode(this.Left, valToDelete);
            }
            else if (valToDelete > this.Value)
            {
                this.Right = RemoveNode(this.Right, valToDelete);
            }
            else
            {
                // Noeud avec un enfant ou sans enfant
                if (this.Left == null)
                {
                    return(this.Right);
                }
                else if (this.Right == null)
                {
                    return(this.Left);
                }

                //Noeud avec 2 enfants , recherche du neoud le plus petit
                Tree Temp = Tree.TreeMinimumValue(this.Right);
                this.Value = Temp.Value;

                //Efface le successeur dans l'ordre
                this.Right = RemoveNode(this.Right, this.Value);
            }

            return(this);
        }