/// <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); }
/// <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); }
/// <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); }