Possible Duplicate:
Intersection of 2 binary trees throws Stack Overflow error
Java Binary Search Trees
我需要返回一个新的OrderedSet,其中包含两个二叉树的重叠元素。我认为引发错误的是私有OrderedSet,至少那是eclipse告诉我的。
private OrderedSet<E> resultIntersect = new OrderedSet<E>();
public OrderedSet<E> intersection(OrderedSet<E> other) {
OrderedSet<E> result = new OrderedSet<E>();
result = resultIntersect;
return result;
}
private void intersection(OrderedSet<E> other, TreeNode t) {
if (other.contains(t.data)) {
resultIntersect.insert(t.data);
}
if(t.left != null)
intersection(other, t.left);
if(t.right != null)
intersection(other, t.right);
}
public OrderedSet<E> intersection(OrderedSet<E> other) {
OrderedSet<E> result = new OrderedSet<E>();
result = intersection(other, root, result);
return result;
}
private OrderedSet<E> intersection(OrderedSet<E> other, TreeNode t, OrderedSet<E> result) {
if (other.contains(t.data)) {
result.insert(t.data);
}
if (t.left != null && t.right != null)
return intersection(other, t.left, result) + intersection(other, t.right, result);
if (t.left != null)
intersection(other, t.left, result);
if (t.right != null)
return intersection(other, t.right, result);
else
return result;
}
最佳答案
我在您的other question中回答了,但是为了完整起见,这里再次出现。
尽管您没有提及它,并且您发布的代码中没有包含它,但我猜OrderedSet<E> resultIntersection
是OrderedSet<E>
中的一个字段。在这种情况下,当您创建OrderedSet<E>
的新实例时,它将创建另一个OrderedSet<E>
实例以分配给resultIntersection
。然后有它自己的resultIntersection
,需要创建OrderedSet<E>
的实例,依此类推...
解决方法是删除resultIntersection
并找到实现intersection
的其他方式。通常,让方法在不需要时通过操纵共享状态来传递数据的方法通常是不正确的,因为这会使逻辑更加难以遵循,并可能导致多线程问题。
关于java - 相交的2个二叉树-引发堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11271544/