gpt4 book ai didi

java - 我在跟踪 overAllRoot 时遇到问题,我的代码在最后!我面临着无限循环

转载 作者:行者123 更新时间:2023-12-01 15:58:08 25 4
gpt4 key购买 nike

编写一个可以添加到 IntTree 类中的 mergeWith 方法。该方法接受另一个整数二叉树作为参数,并将两棵树组合成一个新的第三棵树并返回。新树的结构应该是两棵原始树的结构的并集。它应该在任一原始树(或两棵树)中存在节点的任何位置都有一个节点。新树的节点应存储一个整数,指示哪棵原始树在该位置有一个节点(如果只有第一棵树有该节点,则为 1;如果只有第二棵树有该节点,则为 2;如果两棵树都有该节点,则为 3) )。例如,假设 IntTree 变量 t1 和 t2 已初始化并存储以下树:

t3

               +---+
| 3 |
___ +---+ ___
/ \
+---+ +---+
| 3 | | 3 |
+---+ +---+
/ \ / \

+---+ +---+ +---+ +---+
| 3 | | 1 | | 2 | | 3 |
+---+ +---+ +---+ +---+
/ \
+---+ +---+
| 1 | | 2 |
+---+ +---+

您可以定义私有(private)辅助方法来解决此问题,但否则您不得调用该类的任何其他方法,也不得创建任何数据结构,例如数组、列表等。您的方法不应更改其中任何一个的结构或内容被比较的两棵树的。

public IntTree combineWith(IntTree t2)

{
IntTree t3 = new IntTree();

while(this.overallRoot != null && t2.overallRoot!= null)
{
t3.overallRoot = new IntTreeNode(3);

// for the 3 combination
if(this.overallRoot.left != null && t2.overallRoot.left != null)
{
t3.overallRoot.left = new IntTreeNode(3) ;
}

if(this.overallRoot.right != null && t2.overallRoot.right != null)
{
t3.overallRoot.right = new IntTreeNode(3) ;
}

// for the 1 combination
if(this.overallRoot.left != null && t2.overallRoot.left == null)
{
t3.overallRoot.left = new IntTreeNode(1) ;
}

if(this.overallRoot.right != null && t2.overallRoot.right == null)
{
t3.overallRoot.right = new IntTreeNode(1) ;
}


// for the 2 combination
if(this.overallRoot.left == null && t2.overallRoot.left != null)
{
t3.overallRoot.left = new IntTreeNode(2) ;
}

if(this.overallRoot.right == null && t2.overallRoot.right != null)
{
t3.overallRoot.right = new IntTreeNode(2) ;
}




}
return t3;
}

最佳答案

所以问题的关键是你在期望以某种方式改变但永远不会改变的条件下循环:

this.overallRoot != null && t2.overallRoot!= null

如果循环的第一次迭代为真,则循环的每次迭代都为真(因此是无限循环)!

由于这是家庭作业,我不会给出直接答案,但您应该考虑在两棵树上递归,比较每个子树。您编写的函数应该充分支持基本情况,您现在的挑战将是调用递归。

关于java - 我在跟踪 overAllRoot 时遇到问题,我的代码在最后!我面临着无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635803/

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