Bonjour à tous,

Pour des fins totallement académique, je suis en train de me créer un arbre binaire de recherche en .NET 2.0. Jusqu'ici, aucun problème.

Je me suis créé une classe BinaryTreeNode qui consiste en un noeud.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
    class BinaryTreeNode<T> where T : IComparable
    {
        internal BinaryTreeNode<T> left;
        internal BinaryTreeNode<T> right;
        private T value;
 
        public BinaryTreeNode(T value)
        {
            this.value = value;
        }
    }
Puis dans une classe BinaryTree, c'est là que je retrouve mon Root (racine) et je ne suis pas tout à fait certain de comprendre comment .NET fonctionne. Voici la méthode qui me cause problème. Tout d'abord, pour que cette méthode fonctionne, j'ai du ajouter le mot clef REF afin de passer par référence mon noeud, même si je croyais qu'un objet était toujours passé par référence en .NET. Est-ce que j'ai manqué quelque chose?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
        public void Add(ref BinaryTreeNode<T> node, T value)
        {
            if (node == null)
                node = new BinaryTreeNode<T>(value);
            else
                if (node.Value.CompareTo(value) > 0) Add(ref node.left, value);
                else if (node.Value.CompareTo(value) < 0) Add(ref node.right, value);
        }
Secundo, comment cette méthode peut fonctionner? J'appel la méthode Add récursivement et lui passe une référence vers Left ou Right qui sont NULL. Comment c'est possible? Dans ce contexte, .NET créé le noeud et ce nouveau noeud fera référence à son précédent. Comment ca fonctionne? .NET renvoie donc un pointeur vers la zone mémoire qui contient un pointeur vers un noeud Left ou Right? Est-ce que c'est cela ?

Merci de votre aide!

Martin