二叉搜索树递归错误和操作跟踪

时间:2016-04-24 23:09:26

标签: java recursion binary-search-tree

我的工作是展示插入随机生成的密钥(0-14012891)的步骤,例如当值较小时向左插入,当值较大时向右插入。这是我到目前为止所有这一切,我很困惑,任何类型的帮助/指针将不胜感激,我还有另一个错误,我的根14012891在添加每个新的随机生成的数字之后继续以递归方式打印,如何我也摆脱了这个吗?谢谢!

Node root;

public void addNode(int key, String name) {

Node newNode = new Node(key, name);
if(root == null) {
    root = newNode;
} else {
    Node focusNode = root;
    Node parent;
    while(true) {
        parent = focusNode;
        if(key < focusNode.key) {
            focusNode = focusNode.leftChild;
            if(focusNode == null) {
                parent.leftChild = newNode;
                return;
            }
            else {
                focusNode = focusNode.rightChild;
                if (focusNode == null) {
                    parent.rightChild = newNode;
                    return;
                }
            }
        }
    }
}
}
public void preOrderTraverseTree(Node focusNode) {
    if (focusNode!=null) {
        System.out.println(focusNode);

        preOrderTraverseTree(focusNode.leftChild);

        preOrderTraverseTree(focusNode.rightChild);
    }
}

public static void main (String[] args) {
    Random rand = new Random(); 
for (int j = 0; j<10; j++) 
{
int pick = rand.nextInt(100);

    CourseWork2 newTree = new CourseWork2();
    newTree.addNode(14012891," Root ");
    newTree.addNode(pick, "");

    newTree.preOrderTraverseTree(newTree.root);
}
}

public class Node {
int key;
String name;

Node leftChild;
Node rightChild;

Node(int key, String name) {

    this.key = key;

    this.name = name;

}
public String toString () {
    return name + " " + key;
}
}
}

1 个答案:

答案 0 :(得分:0)

因此,首先,您通过for循环每次迭代创建一个新树,因此它将没有节点。然后你要添加一个根节点和一个0-100的随机数。因此,预期的结果是它将打印出根节点和随机数10次。换句话说,你的树永远不会超过2个节点。

其次,你的add方法不是递归的。您将根设置为范围中的最大值,因此通过while循环的第一次迭代将始终以终止(return)结束,因此add永远不会遍历到树的第二级以下。

希望这有助于您朝着正确的方向前进。