通用 n-ary 树中的 Equals 方法
Equals method in a generic n-ary tree
我有这个 n-ary 树实现,其中每棵树 class 存储数据并且它是 children 在一个数组中。
还有我的不完整方法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);
}
我的主要疑问是如何遍历每个 child 并与另一棵树进行比较,因为这是一个数组,我认为这使工作变得有点困难
首先,如果data
或size
不同returnfalse
然后,检查其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);
}
我有这个 n-ary 树实现,其中每棵树 class 存储数据并且它是 children 在一个数组中。
还有我的不完整方法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);
}
我的主要疑问是如何遍历每个 child 并与另一棵树进行比较,因为这是一个数组,我认为这使工作变得有点困难
首先,如果data
或size
不同returnfalse
然后,检查其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); }