Skocz do zawartości

[C]program z drzewem


kropq

Polecane posty

Witam mam za zadanie napisac program który za pomocą drzewa obliczy wyrażenie artmetyczne. Mam funkcje oblliczajaca ale nie potrafie napisac dodawania elementów do drzewa. Czytałem już dużo o drzewach ale nie moge załapać tego zbytnio. Z góry dziękuje za każdą pomoc. Oto mój kawałek kodu.

 

 
#include <stdio.h>
#include <stdlib.h>
#define dz_plus 1
#define dz_minus 2
#define dz_mnozenie 3
#define dz_dzielenie 4
#define dz_wartosc -1

int main()
{
struct _wezel
{
struct _wezel *lewy;
struct _wezel *prawy;
int dzialanie;
double wartosc;
};

double Oblicz(struct _wezel *w)
{
switch(w->dzialanie)
 {
  case dz_plus:
    return Oblicz(w->prawy) + oblicz (w->lewy);
  case dz_minus:
    return Oblicz(w->prawy) - oblicz (w->lewy); 
  case dz_mnozenie:
    return Oblicz(w->prawy) * oblicz (w->lewy); 
  case dz_dzielenie:
    return Oblicz(w->prawy) / oblicz (w->lewy); 
  case dz_wartosc:
    return w->wartosc;                           
  else:



 system("PAUSE");      
 return 0;

Link do komentarza
Udostępnij na innych stronach

W switch'u na końcu powinno być default zamiast else,

a dodawanie do drzewa powinno wyglądać mniej więcej tak (rozumiem, że chodzi o drzewo BST, albo chociaż zwykłe binarne?):

struct BST
{
       int key;
       struct BST *p;
       struct BST *left;
       struct BST *right;
};
struct BST *dodaj(struct BST *root,int k)
{
       struct BST *y=NULL;
       struct BST *x=root;
       struct BST *z;
       z=(struct BST*) malloc(sizeof(struct BST));
       z->key=k;
       z->left=z->right=z->p=NULL;
       while (x!=NULL)
       {
               y=x;
               if (x->key > z->key) 
                       x=x->left;
               else x=x->right;
       }
       z->p=y;
       if (root==NULL)
               root=z;
       else if (y->key > z->key)
                       y->left=z;
               else
                       y->right=z;
       return root;
}

Program najpierw przygotowuje element (alokacja pamięci itp.), a potem go wstawia tak, żeby drzewo było zgodne własnościami BST.

I z jakiej paki, używasz raz Oblicz, raz oblicz :D ?? wielkość liter musi się zgadzać.

 

Tutaj masz cały programik wykorzystujący tą funkcję:

http://www.jason.unit1.pl/?strona=1&podstrona=11

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...