如何编写我的方法来平衡我的BST?

时间:2016-09-30 12:46:48

标签: java binary-search-tree balance

所以我用Java编写了一个BST实现。我的目标是使其平衡,更准确地说是一个AVL树。我有一些问题,但我不知道如何实现trinodeRestructering方法(即平衡树的方法)我尝试了各种各样的东西,但这些指针有时难以处理,我不知道如何这是递归地做的。下面是我添加新元素的代码,以及检查树中是否有超过两步差异的方法。

添加和平衡方法:

private TreeNode insert(TreeNode currN, TreeNode newN) {
    if (currN == null) {
        return newN;
    }

    if (currN.getData() == newN.getData()) {
        throw new IllegalArgumentException("Value already exists.");
    }

    if (newN.getData() < currN.getData()) {
        if (currN.getLeft() == null) {
            currN.setLeft(newN);

        } else {
            insert(currN.getLeft(), newN);
        }
    } else {
        if (currN.getRight() == null) {
            currN.setRight(newN);

        } else {
            insert(currN.getRight(), newN);
        }
    }

      if (needBalancing()) {
          trinodeRestructering(currN);
      }           

    return currN;
}

private TreeNode trinodeRestructering(TreeNode currN) {
//Not sure what to do here.
    return currN;
}

身高检查方法。

    public boolean needBalancing(){
    if(height(root) == -1){ // true if we need to balance
        return true;
    }else{
        return false;
    }
}

private int height(TreeNode node){
    if (node == null)
        return 0;
    int left = height(node.getLeft());
    int right = height(node.getRight());

    if (left == -1 || right == -1)
        return -1;

    if (Math.abs(left - right) > 1) {
        return -1;
    }

    return Math.max(left, right) + 1;
}

我可能会补充一点,我有一个inOrder方法,也许我可以用它来平衡我的树?

0 个答案:

没有答案