我有这个n-ary树实现,其中每个树类将数据及其子节点存储在数组中。
还有我的不完整方法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);
}
我的主要疑问是我如何通过每个孩子并与其他树进行比较,因为这是一个数组,我认为这会使工作变得更难
答案 0 :(得分:2)
首先,如果data
或size
不同,则返回false
然后,检查其children
逐一:
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;
}
使用Arrays.deepEquals()
private boolean sameTree(ArrayNTree<T> xpto) {
return this.data == xpto.data &&
this.size != xpto.size &&
Arrays.deepEquals(this.children, xpto.equals);
}