解树同构的递归算法?

时间:2019-03-25 17:43:14

标签: java class recursion nullpointerexception

我正在运行代码来检查两棵树是否同构。如果可以重新排列它们以模仿另一个,则它们是同构的。只能交换子节点,不能将父节点与子节点交换,反之亦然,也不能以任何其他方式交换。而且,空树是同构的。

我有一个小的递归代码,该代码首先处理空指针错误。然后,我检查节点是否具有相同的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

0 个答案:

没有答案