特定の赤黒木内のすべての根から葉へのパスを検索しようとしています。特に、rbt が与えられた場合に、すべてのパスに同じ数のブラック ノードがあることをアサートするテストを書きたいと考えていました。
私は2つのグローバル変数でこのようなことを試みていました:
static int count = 0, path = -1;
int check_paths(tree_node t)
{
if (t == NULL)
{
if (path == -1)
path = count;
else
return (path == count);
return 1;
}
if (t->black == 1) ++count;
int x,y;
x = check_paths(t->left);
if (t->black == 1) --count;
y = check_paths(t->right);
return (x&&y);
}
ただし、左の枝の黒いノードの右側に赤いノードがある場合、これはカウントが必要以上に減少したことを意味するため、問題がありました。
ルートからリーフへのパスを検索し、特定の値の頻度をカウントしてから、カウントを比較するより良い方法はありますか? あるいは、rbt のバランスをテストするためのまったく別の方法がありますか (つまり、既に作成されていますが、その正確性は不明です)。