我正在运行代码来检查两棵树是否同构。如果可以重新排列它们以模仿另一个,则它们是同构的。只能交换子节点,不能将父节点与子节点交换,反之亦然,也不能以任何其他方式交换。而且,空树是同构的。
我有一个小的递归代码,该代码首先处理空指针错误。然后,我检查节点是否具有相同的int,以及是否这样做,以递归方式调用其子节点的每个组合。除了在空情况下之外,它唯一一次返回false的时候就是这种组合之一不相等。或者至少这就是我要完成的工作。
这就是我所拥有的(注意:我使用空指针异常,因为我必须使用节点对象)。
class GfG
{
public boolean isIsomorphic(Node root1,Node root2)
{
boolean a, b;
a = b = false;
int i;
try{
i = root1.data;
}
catch(NullPointerException ex){
a = true;
}
try{
i = root2.data;
}
catch(NullPointerException ex){
b = true;
}
if(a == true & b == true){
return true;
}
else if((a == false & b == true) | (b ==false & a ==true)){
return false;
}
else {
if(root1.data == root2.data){
isIsomorphic(root1.left, root2.left);
isIsomorphic(root1.right, root2.right);
isIsomorphic(root1.left, root2.right);
isIsomorphic(root1.right, root2.left);
return true;
}
else{
return false;
}
}
}
}
对象Node具有传递给它并初始化为的int属性,并将两个子节点初始化为null。 (在这种情况下,可以将它们初始化为null,因此可以将其初始化为null。)
在这种情况下,我应该返回false,但返回true,我不知道为什么
0 1 L 0 2 R 1 3 L 1 4 R 2 5 L 2 6 R 3 7 L 3 8 R 4 9 L 4 10 R 5 11 L 5 12 R 6 13 L 6 14 R
0 3 L 0 0 R 3 6 L 3 14 R 0 4 L 0 11 R 6 8 L 6 9 R 14 1 L 14 14 R 4 10 L 4 13 R 11 14 L 11 1 R