Zdravím, zase nemůžu najít chybičku, proč mi ten program padá.
typedef enum Color {
RED, BLACK
} Color;
/**
* @brief Struktura Node slouzi k reprezentaci uzlu v strome
* atribut key klic daneho uzlu
* atribut color muze nabyvat hodnoty 'RED' a 'BLACK'
* atribut parent je reference na rodice uzlu
* atribut left je reference na leveho potomka
* atribut right je reference na praveho potomka
* */
typedef struct Node {
int key;
Color color;
struct Node* parent;
struct Node* left;
struct Node* right;
} Node;
/**
* @brief Struktura RedBlackTree slouzi k reprezentaci
* binarniho vyhledavaciho stromu
* atribut root je reference na korenovy uzel typu Node
* */
typedef struct RedBlackTree {
Node* root;
} RedBlackTree;
/**
* @brief Vykona rotaci doleva kolem uzlu 'rotationRoot' v strome 'tree'
**/
/*
Kromě funkce rotateLeft už bylo vše předem naimplementováno
Chyba je asi v řádku s tree/*->root*/ = y; bez root to nepadá, ale mám jen jeden
node, což je špatně a s root to padá.
*/
void rotateLeft(RedBlackTree *tree, Node *x) {
Node *y = x->right;
x->right = y->left;
if(y->left != NULL){
y->left->parent = x;
}
y->parent = x->parent;
if(x->parent == NULL){
tree/*->root*/ = y;
}else{
if(x == x->parent->left){
x->parent->left = y;
}else{
x->parent->right = y;
}
}
y->left = x;
x->parent = y;
}
Mám nodes od 0 po 6 pod sebou rovnány do prava a když rotuji do leva, tak z 0 (kořen) by měla přijít 1 a mít syny, levého 0 a pravého 2 a ostatní pod sebe a pak rotovat podle node x. Jen mi to někde padá. Ještě všemu tolik rozumím a většinou se učím na příkladech, než teoriích a definicích.