• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Drzewo bst rotacja

Cloud VPS
0 głosów
367 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)

Czesc mam pytanie czy można wykonać funkcje rotującą bez posiadania wskaźnika na rodzica? 

Jeśli nie jak mogę zmodyfikować tą funkcję aby go dodać.

void add_node(struct tree_node **root,int key, char value)
{
    if(*root==NULL)
    {
        *root = (struct tree_node *)malloc(sizeof(struct tree_node));
        if(*root) {
            (*root)->key = key;
            (*root)->value = value;
            (*root)->left_child = (*root)->right_child =(*root)->parent=NULL;
        }
    } else
    if((*root)->key >= key)
        add_node(&(*root)->left_child,key,value);
    else
        add_node(&(*root)->right_child,key,value);
}

 

komentarz 24 maja 2018 przez kikosiak Obywatel (1,010 p.)

Co jest nie tak w tym kodzie?

struct tree_node *rotation_right(struct tree_node*root,struct tree_node*R)
{
    struct tree_node *p,*d;

    d=R->left_child;
    if(d==NULL)
        return;
    p=R->parent;
    R->left_child=d->right_child;
    if(R->left_child!=NULL)
        R->left_child->parent=R;
    d->right_child=R;
    d->parent=p;

    if(p!=NULL)

        if(p->left_child==R)
            p->left_child=d;
        else
            p->right_child=d;
    else
        root=d;

    return root;
};

 

1 odpowiedź

0 głosów
odpowiedź 24 maja 2018 przez kikosiak Obywatel (1,010 p.)

Ok dodałem do funkcji rodzica tylko nie do końca wiem jak mogę zrobić tą funkcję rotującą 

void add_node(struct tree_node **root, int key, char value)
{
    struct tree_node *tmp=NULL;
    while(*root!=NULL) {

        if((*root)->key>=key)
          {  tmp=*root;
              root = &(*root)->left_child;

          }
        else
        {
            tmp=*root;
            root = &(*root)->right_child;

        }
    }
    *root = (struct tree_node *)malloc(sizeof(struct tree_node));
    if(*root) {
        (*root)->key = key;
        (*root)->value = value;
        (*root)->left_child = (*root)->right_child = NULL;
        (*root)->parent=tmp;
    }
}

 

Podobne pytania

0 głosów
1 odpowiedź 336 wizyt
pytanie zadane 24 maja 2018 w C i C++ przez kikosiak Obywatel (1,010 p.)
0 głosów
0 odpowiedzi 994 wizyt
pytanie zadane 23 maja 2017 w C i C++ przez kakola3 Początkujący (270 p.)
0 głosów
1 odpowiedź 425 wizyt
pytanie zadane 4 lutego 2020 w C i C++ przez Kate1243 Nowicjusz (120 p.)

93,488 zapytań

142,422 odpowiedzi

322,772 komentarzy

62,906 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...