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");
}
}
}
这只是一个简单的树实现,我在其中将所有节点添加到列表中,然后检查较小的字符串是否是子字符串更大的字符串,因为这将使我们更小的树将是一个子树更大的树 感谢大家的帮助...
答案 0 :(得分:2)
containsAll()
ArrayList
的实现使用该类型的equals()
方法来确定一个列表是否包含另一个列表的元素。
您尚未覆盖equals()
类的Node
,因此它将使用Object
中的实现来检查引用相等性。由于您在Node
方法中创建了新 insert()
,因此此检查将失败。
您需要覆盖equals()
并检查Node
中包含的值的相等性。