2010-02-25 3 views
0

Je veux être capable de parcourir un arbre et de comparer les nœuds d'un arbre aux nœuds d'un autre arbre du même format.Comparer des arbres dans une arborescence

EX: Il existe cinq catégories.

1 - 5. Sont tous statiques et identiques entre les deux arbres.

In 1. Toutes les valeurs statiques. Donc j'ai juste besoin de comparer les valeurs des nœuds là-bas.

Dans 2. Ceci provient d'un objet KVP et donc ceux-ci peuvent être différents en termes de nombre de nœuds et de leurs enfants uniques.

Dans 3. Comme 2, mais il y a 5 enfants

Dans 4-5 sont les mêmes que 1.

Je pensais en boucle dans les arbres et ayant une autre boucle pour chaque catégorie et vérifier les nœuds contiennent les mêmes valeurs.

La dynamique pour 2 et 3 je ferais quelque chose de la même chose, mais vérifiez la taille d'abord puis bouclez si la taille est la même.

Si je trouve une différence je changerais la couleur des noeuds.

Est-ce la meilleure méthode pour moi?

Répondre

1

Je ne pense pas que vous ayez beaucoup de choix mais de faire différents algorithmes de comparaison basés sur les données de l'arbre car il semble que vos nœuds sont symétriquement différents selon l'endroit où ils se trouvent dans l'arbre.

0

Depuis que je connaissais la profondeur ... Je l'ai fait:

For h As Integer = 0 To tree1.Nodes(0).Nodes.Count - 1 
     For i As Integer = 0 To tree1.Nodes(0).Nodes(h).Nodes.Count - 1 
      For j As Integer = 0 To tree1.Nodes(0).Nodes(h).Nodes(i).Nodes.Count - 1 

       If tree1.Nodes(0).Nodes(h).Nodes(i).Text <> _ 
         tree2.Nodes(0).Nodes(h).Nodes(i).Text Then 
        tree2.Nodes(0).Nodes(h).Nodes(i).BackColor = Color.Red 
        tree2.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Expand() 
        tree2.Nodes(0).Nodes(h).Nodes(i).Expand() 
        tree2.Nodes(0).Nodes(h).Expand() 
        tree2.Nodes(0).Expand() 

        tree1.Nodes(0).Nodes(h).Nodes(i).BackColor = Color.Red 
        tree1.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Expand() 
        tree1.Nodes(0).Nodes(h).Nodes(i).Expand() 
        tree1.Nodes(0).Nodes(h).Expand() 
        tree1.Nodes(0).Expand() 


       ElseIf tree1.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Text <> _ 
        tree2.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Text Then 
        tree2.Nodes(0).Nodes(h).Nodes(i).Nodes(j).BackColor = Color.Red 
        tree2.Nodes(0).Nodes(h).Nodes(i).BackColor = Color.Red 
        tree2.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Expand() 
        tree2.Nodes(0).Nodes(h).Nodes(i).Expand() 
        tree2.Nodes(0).Nodes(h).Expand() 
        tree2.Nodes(0).Expand() 

        tree1.Nodes(0).Nodes(h).Nodes(i).Nodes(j).BackColor = Color.Red 
        tree1.Nodes(0).Nodes(h).Nodes(i).BackColor = Color.Red 
        tree1.Nodes(0).Nodes(h).Nodes(i).Nodes(j).Expand() 
        tree1.Nodes(0).Nodes(h).Nodes(i).Expand() 
        tree1.Nodes(0).Nodes(h).Expand() 
        tree1.Nodes(0).Expand() 
       End If 
      Next 

     Next 
    Next 
Questions connexes