如何让我的BST添加方法在前两个子节点之后添加节点?

时间:2016-05-09 13:47:19

标签: java binary-tree binary-search-tree

我是Binary Trees的新手,并且正在为一个简单的游戏开发一个add方法。目前,每次添加新节点时,该方法都会替换根节点的子节点。如何让它在整个树中添加新节点而不是仅替换根节点的前两个子节点?这就是我到目前为止所做的:

public boolean add(User friend) {
    User node = friend;
    if (root == null) {
        root = node;
        return true;
    }
    if (node.key() < root.key()) {
        if(root.left == null) {
            root.setLeft(node);
        }
    } else if (node.key() > root.key()) {
        if(root.getRight() == null) {
            root.setRight(node);
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:1)

通常,对于二叉树,您将编写递归函数。您可以找到节点所属的一侧,而不是管理一个函数调用的插入,并将插入移交给该节点一侧的递归函数调用。

假设此函数属于类User,这应该可以。

public boolean beFriend(User friend) {
    User node = friend;
    if (root == null) {
        root = node;
        return true;
    }
    if (node.getKey() < root.getKey()) {
        if(root.getLeft() == null) {
            root.setLeft(node);
        } else {
            // recursively call beFriend handing insertion to the child
            root.getLeft().beFriend(node);
        }
    } else if (node.getKey() > root.getKey()) {
        if(root.getRight() == null) {
            root.setRight(node);
        } else {
            // recursively call beFriend handing insertion to the child
            root.getRight().beFriend(node); 
        }
    } else { // node.getKey() == root.getKey() so we replace the previous root
        node.setLeft(root.getLeft());
        node.setRight(root.getRight());
        root = node;
    }
    return true;
}