通用n-ary树中的等于方法

时间:2018-05-14 15:32:34

标签: java arrays tree equals

我有这个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);
}

我的主要疑问是我如何通过每个孩子并与其他树进行比较,因为这是一个数组,我认为这会使工作变得更难

1 个答案:

答案 0 :(得分:2)

首先,如果datasize不同,则返回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);
    }