所以我用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方法,也许我可以用它来平衡我的树?