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.
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:
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; } }
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 ?Code:
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); }
Merci de votre aide!
Martin