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)