Java 对称树中与遍历有关的问题

Java 对称树中与遍历有关的问题,java,algorithm,data-structures,Java,Algorithm,Data Structures,我想解决一个问题,也就是“对称树” 我提供了正确的解决方案,但是我想知道为什么这段代码不起作用 我认为ArrayList可以包含null值,并且可以在方法“equals”中比较null值 任何人都能看出哪里错了?(我知道这个算法不是有效的方法) public boolean是对称的(树节点根){ if(root==null){ 返回true; } List list1=新的ArrayList(); List list2=新的ArrayList(); list1=isMirror1(根,list1

我想解决一个问题,也就是“对称树” 我提供了正确的解决方案,但是我想知道为什么这段代码不起作用

我认为ArrayList可以包含null值,并且可以在方法“equals”中比较null值

任何人都能看出哪里错了?(我知道这个算法不是有效的方法)

public boolean是对称的(树节点根){
if(root==null){
返回true;
}
List list1=新的ArrayList();
List list2=新的ArrayList();
list1=isMirror1(根,list1);
list2=isMirror2(根,list2);
对于(int i=0;i
list1.size()
list2.get(i)
可以引发NullPointerException

也许您可以在循环之前检查类似的内容:

if ( list1==null || list2==null) {
    if ( list1==null && list2==null ) return true;
    return false;
}

for....
代码是为了显示主要思想,你可以简化它

编辑

首先,您可以实现自己的equals方法并安全地使用它:

public boolean equalsWithNulls(TreeNode a, TreeNode b) {
    if (a==b) return true;
    if ((a==null) || (b==null)) return false;
    return a.equals(b);
 }

我是否可以存储空值?我想我需要存储null值,以确定它的对称树是否可以在列表中存储null值。但在比较两个节点时,需要进行不同的检查。我添加了equalsWithNulls方法,您可以使用它。
public boolean equalsWithNulls(TreeNode a, TreeNode b) {
    if (a==b) return true;
    if ((a==null) || (b==null)) return false;
    return a.equals(b);
 }