我正在努力制作探戈树, 我需要检查探戈中的每个子树是否平衡。
如果它不平衡我需要平衡吗?我努力使整个RB树平衡,但我没有得到任何正确的逻辑,所以任何人都可以帮助我吗?
这里我正在添加代码来检查如何找到我的树是平衡的但是当它不是时 平衡我如何才能平衡。
static boolean verifyProperty5(rbnode n) {
int left = 0, right = 0;
if (n != null) {
bh++;
left = blackHeight(n.left, 0);
right = blackHeight(n.right, 0);
}
if (left == right) {
System.out.println("black height is :: " + bh);
return true;
} else {
System.out.println("in balance");
return false;
}
}
public static int blackHeight(rbnode root, int len) {
bh = 0;
blackHeight(root, path1, len);
return bh;
}
private static void blackHeight(rbnode root, int path1[], int len) {
if (root == null)
return;
if (root.color == "black"){
root.black_count = root.parent.black_count+1;
} else{
root.black_count = root.parent.black_count;
}
if ((root.left == null) && (root.right == null)) {
bh = root.black_count;
}
blackHeight(root.left, path1, len);
blackHeight(root.right, path1, len);
}
答案 0 :(得分:1)
不要尝试生成树并验证它是否平衡。尝试从一开始就使用红黑色结构。它将保证生成的树是平衡的。还是我误解了?
编辑:
似乎Tango树是以红黑树为基础的。这意味着你需要在实现Tango树之前已经实现了一个红黑树。
答案 1 :(得分:0)
如果您正在寻找红黑树平衡,可以查看代码here。