Java 使用递归添加二叉树节点时出错&;是否在同一行上打印父/子节点?
我一直盯着这件事看,我的导师和同学都没能发现可能发生的事情。任何帮助都将不胜感激 我的二叉树程序中有一个错误,导致左手边的叶子被重复打印,而右手边的叶子被跳过,但我不知道它可能在哪里 这个赋值指定了我们要使用的设计和方法签名,以及在某些方法中使用递归,所以我不能改变任何一个。每个节点都有一个最多包含两个子节点的数组 我们需要格式化打印,使每个节点与其子节点打印在同一行上 例如:Java 使用递归添加二叉树节点时出错&;是否在同一行上打印父/子节点?,java,recursion,printing,binary-tree,nodes,Java,Recursion,Printing,Binary Tree,Nodes,我一直盯着这件事看,我的导师和同学都没能发现可能发生的事情。任何帮助都将不胜感激 我的二叉树程序中有一个错误,导致左手边的叶子被重复打印,而右手边的叶子被跳过,但我不知道它可能在哪里 这个赋值指定了我们要使用的设计和方法签名,以及在某些方法中使用递归,所以我不能改变任何一个。每个节点都有一个最多包含两个子节点的数组 我们需要格式化打印,使每个节点与其子节点打印在同一行上 例如: Node rootNode = new Node("A"); rootNode.a
Node rootNode = new Node("A");
rootNode.addChild("B", "A");
rootNode.addChild("E", "A");
rootNode.addChild("F","E");
rootNode.addChild("H","E");
rootNode.addChild("C", "B");
rootNode.addChild("D", "B");
rootNode.printTree();
应返回:
ABE
BCD
C
D
EFH
F
H
而是印刷:
ABE
BCC
C
C
EFH
F
H
重新打印“C”时,节点“D”丢失,但不知何故,节点“H”(也是与“D”类似的右侧叶,但位于右侧分支而不是左侧)仍能正确打印。当我对“D”使用find()方法时,它返回null,这似乎表明它没有被放入树中,因此我认为错误在addChild()方法中。我就是找不到它在哪里
public boolean addChild(String ID, String parentID) {
if(myID.equals(parentID)) { // found parent
if(children[0] == null) {
children[0] = new Node(ID, find(parentID));
numberOfChildren++;
return true;
}
if (children[1] == null) {
children[1] = new Node(ID, find(parentID));
numberOfChildren++;
return true;
}
else {
// System.out.println("This is already full.");
return false;
}
}
else
{
if(numberOfChildren == 0) {
return false;
}
else if(numberOfChildren == 1) {
return children[0].addChild(ID, parentID);
}
else {
if(children[0].addChild(ID, parentID) == false) {
return children[1].addChild(ID, parentID);
}
else {
return children[0].addChild(ID, parentID);
}
}
}
}
否则,问题可能出现在toString/print方法中:
public String toString() {
String childOne = "";
String childTwo = "";
if (children[0] != null) {
childOne = children[0].getId();
}
if(children[1] != null) {
childTwo = children[1].getId();
}
return(myID + childOne + childTwo);
}
@Override
public void printTree() {
// TODO Auto-generated method stub
System.out.println(toString() + " ");
if(children[0] != null) {
children[0].printTree();
}
if(children[1] != null) {
children[1].printTree();
}
}
}
提前谢谢你 第一步是使用调试器确定问题是在树构造中还是在树打印中——即,树是否实际具有未打印的数据?问题在于构造中——节点“D”在尝试调用find()时返回null,而find()应返回节点。除此之外,当调试器到达addChild(“D”、“B”)时,它转到if(numberOfChildren==0),然后返回children[1]/addChild(ID,parentID)