Le moyen le plus efficace de tester les deux arbres binaires pour l'égalité

Comment voulez-vous mettre en œuvre en Java de l'arbre binaire classe de nœud et l'arbre binaire de la classe de soutien le plus efficace (à partir du moment de l'exécution du point de vue de l'égalité méthode de contrôle (aussi doit être mise en œuvre):

    boolean equal(Node<T> root1, Node<T> root2) {}

ou

    boolean equal(Tree t1, Tree t2) {}

Tout d'abord, j'ai créé la classe de Nœud comme suit:

    public class Node<T> {
        private Node<T> left;
        private Node<T> right;
        private T data;

        //standard getters and setters
    }

et puis la méthode equals qui prend 2 nœuds racine comme un des arguments et exécute le standard de comparaison récursive:

    public boolean equals(Node<T> root1, Node<T> root2) {
        boolean rootEqual = false;
        boolean lEqual = false;
        boolean rEqual = false;    

        if (root1 != null && root2 != null) {
            rootEqual = root1.getData().equals(root2.getData());

            if (root1.getLeft()!=null && root2.getLeft() != null) {
                //compare the left
                lEqual = equals(root1.getLeft(), root2.getLeft());
            }
            else if (root1.getLeft() == null && root2.getLeft() == null) {
                lEqual = true;
            }
            if (root1.getRight() != null && root2.getRight() != null) {
                //compare the right
                rEqual = equals(root1.getRight(), root2.getRight());
            }
            else if (root1.getRight() == null && root2.getRight() == null) {
                rEqual = true;
            }

            return (rootEqual && lEqual && rEqual);
        }
        return false;
    } 

Ma deuxième tentative a été de mettre en œuvre les arbres à l'aide de tableaux et index pour la traversée. Ensuite, la comparaison pourrait être faite en utilisant les opérations bit à bit (ET) sur les deux tableaux - lire le bloc de 2 tableaux et masque de l'un par l'autre à l'aide ET logique. Je n'ai pas réussi à obtenir mon code de travail donc je n'ai pas poster ici (je vous remercie de votre mise en œuvre de la deuxième idée ainsi que vos améliorations).

Pensées, la façon de faire de test d'égalité pour les arbres binaires le plus efficacement?

MODIFIER

La question suppose l'égalité structurelle. (Pas la sémantique de l'égalité)

Cependant, le code qui teste la sémantique de l'égalité par exemple, "Devrions-nous considérer les deux arbres à être égaux si leur contenu est identique, même si leur structure n'est pas?" Serait juste de parcourir l'arbre dans l'ordre et il devrait être très simple.

  • "Doit-on l'envisager..." suggère un avis subjectif, et en faisant en SORTE de ne pas l'idéal pour ces questions [pourrait être fermé comme "non constructif"]. Vous devez définir, elle est: l'égalité structurelle ou semantical l'égalité, vous êtes après. [au moins de l'OMI]
InformationsquelleAutor aviad | 2012-03-07