gpt4 book ai didi

java - 2 个二叉树的交集会引发堆栈溢出错误

转载 作者:行者123 更新时间:2023-12-01 15:18:44 24 4
gpt4 key购买 nike

我试图使两个二叉树相交,并使用相同的节点创建一个新的二叉树,但以下内容会产生 stackOverflow 错误。谁能帮我吗?

private OrderedSet<E> resultIntersect = new OrderedSet<E>();

public OrderedSet<E> intersection(OrderedSet<E> other) {
OrderedSet<E> result = new OrderedSet<E>();
if (other.root == null || root == null)
return result;
else if (height() == 0 && other.height() == 0
&& other.root.data.equals(root.data)) {
result.insert(root.data);
return result;
} else {
intersection(other, root, other.root);
result = resultIntersect;
}
return result;
}

private void intersection(OrderedSet<E> other, TreeNode root1,
TreeNode root2) {
if (root1 == root2) {
resultIntersect.insert(root1.data);
}
if (root1 == null || root2 == null) {
return;
}
intersection(other, root1.left, root2.left);
intersection(other, root1.right, root2.right);
}

编辑

我觉得这更接近我需要的方式,但我仍然收到错误。

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);
}

最佳答案

我不知 Prop 体问题,但有一些问题。

  1. 为什么“other”被传递到第二个交叉点(它从未被使用过)?
  2. 插入集合后不应该返回吗?
  3. 您不应该传入本地 OrderedSet (称为 result)并插入其中,而不是全局变量吗?
  4. 您不应该比较 root1 和 root2 的数据而不是节点本身吗?
  5. 第二个返回是多余的
  6. 在测试 null 之前取消引用根
  7. 无需进行初始测试

清理这些缺陷,我得到:

public OrderedSet<E> intersection(OrderedSet<E> other) {
OrderedSet<E> result = new OrderedSet<E>();
intersection(result, root, other.root);
return result;
}

private void intersection(OrderedSet<E> result, TreeNode root1,
TreeNode root2) {
if (root1 == null || root2 == null) {
return;
}
if (root1.data == root2.data) {
result.insert(root1.data);
}
intersection(result, root1.left, root2.left);
intersection(result, root1.right, root2.right);
}

我不知道这是否有效,但它更接近

关于java - 2 个二叉树的交集会引发堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11271206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com