Метод равных в общем n-арном дереве - PullRequest
0 голосов
/ 14 мая 2018

У меня есть эта n-арная реализация дерева, в которой каждый класс дерева хранит данные и их дочерние элементы в массиве.

Также есть мой неполный метод equals().

public class ArrayNTree<T extends Comparable<T>> implements NTree<T>, Cloneable {

/* Data of the tree*/
private T data;

/* Primary array to store the children */
private ArrayNTree<T>[] children;

...

public boolean equals(Object other) { // FIXME

    if (this == other)
        return true;

    if (other == null)
        return false;

    if(other instanceof ArrayNTree)
        return sameTree( (ArrayNTree<T>) other );

    return false;
}

private boolean sameTree(ArrayNTree<T> xpto) {
    return (this.data == xpto.data &&
            //this.children == xpto.children && ???????
            this.size == xpto.size);
}

Мое главное сомнение в том, как мне пройти через каждого ребенка и сравнить с другим деревом, так как это массив, я думаю, что это делает работу немного сложнее

1 Ответ

0 голосов
/ 14 мая 2018

Во-первых, если data или size отличается, возврат false

Затем проверьте его children


  1. по одному:

    private boolean sameTree(ArrayNTree<T> xpto) {
        if(this.data != xpto.data || this.size != xpto.size)
            return false;
        for(int i = 0; i<this.children.length: i++){
            if(!this.children[i].equals(xpto.children[i]))
                 return false;
        }
        return true;
    }
    
  2. Использование Arrays.deepEquals()

    private boolean sameTree(ArrayNTree<T> xpto) {
        return this.data == xpto.data && 
               this.size != xpto.size && 
               Arrays.deepEquals(this.children, xpto.equals);
    }
    
...