我试图找到一棵树是否是另一棵树的子树并运行到ArrayList比较问题

时间:2015-03-24 21:35:23

标签: java algorithm tree

import java.util。*;

class TreeDemo
{

public static class Node
{
    int val;
    Node right, left;

    Node(int val)
    {
        this.val = val;
    }
}

public static class Tree{
    ArrayList<Node> list = new ArrayList<>();
    Node root;

    void insert(int val)
    {   
         if (root == null) 
        {
            root = new Node(val) ;
        }
        else{
            insertNode(val,root);
        }
    }

    void insertNode(int val, Node root)
    {
         if (root == null) 
        {
            root = new Node(val) ;
        }
         if (val < root.val)
        {
            if(root.left == null)
            {
                root.left = new Node(val) ;
            }
            else
            {
                insertNode(val, root.left);
            }
        }

        else if (val > root.val)
        {
            if(root.right == null)
            {
                root.right = new Node(val) ;
            }
            else
            {
                insertNode(val, root.right);
            }
        }


    }



    ArrayList<Node> preOrder(Node root)
    {   

        if(root!=null)
        {
            System.out.println(root.val);
            list.add(root);
        }
        if(root.left!=null)
        {

            preOrder(root.left);

        }
        if(root.right!=null)
        {

            preOrder(root.right);

        }
        return list;
    }
}

public static void main(String[] args)
{


    Tree t= new Tree();

    t.insert(5);
    t.insert(3);
    t.insert(7);
    t.insert(2);
    t.insert(4);
    t.insert(1);
    t.insert(7);
    t.insert(9);
    t.insert(6);



    Tree r = new Tree();
    r.insert(3);
    r.insert(2);
    r.insert(4);
    r.insert(1);

        List<Node> a = t.preOrder(t.root);
        System.out.println("----------------------------------------------------");
        List<Node> b = r.preOrder(r.root);

        if (a.containsAll(b))

这条线似乎对我不起作用,或者我确信我可能犯了一些我无法注意到的错误。

        {
            System.out.println("contains");
        }
        else
        {
            System.out.println("does not contain");
        }

}
}

这只是一个简单的树实现,我在其中将所有节点添加到列表中,然后检查较小的字符串是否是子字符串更大的字符串,因为这将使我们更小的树将是一个子树更大的树 感谢大家的帮助...

1 个答案:

答案 0 :(得分:2)

containsAll() ArrayList的实现使用该类型的equals()方法来确定一个列表是否包含另一个列表的元素。

您尚未覆盖equals()类的Node,因此它将使用Object中的实现来检查引用相等性。由于您在Node方法中创建了 insert(),因此此检查将失败。

您需要覆盖equals()并检查Node中包含的值的相等性。