检查二进制树中的对称性 我正在试图在给定的树上检查对称性,我的想法是,我可以使用前订单遍历(NLR)从左子树中制作两个阵列列表,并从右边的子树和反向预订的trave中制作了两个阵列。

问题描述 投票:0回答:1
对抗产生的原因

false

是因为您正在与
==
操作员面对两个参考。
java computer-science
1个回答
1
投票
==

操作员面对两个变量的

核。因此,您实际上在代码中所做的是检查第一个参考所包含的地址是否等于第二个参考文献所包含的地址。但是,由于两个参考都指向不同的对象,因此要进行不同的内存地址,因此对抗只能返回
false

如果您想检查两个引用是否指向表示相同内容的两个对象,则需要使用

equals()
方法。为了使用equals(),您首先需要在BinaryTree
类中覆盖它,并提供
BinaryTree

对象之间平等的定义。还要注意,该文档也建议在覆盖

hashcode()时覆盖

equals()
方法,以便两种方法都与HashCode方法的general合同一致,该方法指出,equeAge对象必须具有相等的哈希码。但是,这只是一个建议,在您的情况下并不是严格必要的。
废话说
BinaryTree
equals()
提供了适当的定义,您的
traversal()
方法看起来更像是这样:
public static boolean symmetricTree(BinaryTree<Integer> root){
    System.out.println(traversal(root.left, true));
    System.out.println(traversal(root.right, false));

    return traversal(root.left, true).equals(traversal(root.right, false));
}
return traversal(root.left, true) == traversal(root.right, false);

这听起来对我来说是错误的,在Java中,有一种方法实际上检查数组是否平均(以相同的顺序具有相同的元素)。您提出的方式比较了参考文献:

equals
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.