WITAM!
Mam taka strukture:

typedef struct BT
{
  uint type;
  uint out_num;
  uint in_num1;
  uint in_num2;
  struct BT *previous_gate1;
  struct BT *previous_gate2;
  struct BT *next_gate;
} logic_gate;

logic_gate *start;

I teraz chce ja przeszukac az znajde pewna wartosc search w jednej z in_num1 lub in_num2. Wiem z gory, ze znaduje sie ona w jednej z tego typu struktur. Drzewo jest zorientowane na dwie strony, czyli kazdy wezel ma wskaznik do rodzica(next_gate) i swoich synow(previous_gate1, previous_gate2). Wezly nie sa jednak ponumerowane w zaden sposob. Funkcja ma zwracac wskaznik na dana strukture (element drzewka). NULL'a nie zwroci bo jak pisalem na pewno jest tam ten element. Sam kombinowalem i wymyslilem cos takiego:

#define TRUE 1
#define FALSE 0
#define NUP 0

unsigned int found_gate=TRUE;

logic_gate *search_gate(logic_gate *gate,cuint search)
{
  logic_gate *tmp=gate;
  
  if(!found_gate)
  {
    if(tmp->in_num1==search || tmp->in_num2==search)
    {
      printf("Znalezion!! o:%d i1: %d i2: %d\n",tmp->out_num,tmp->in_num1,tmp->in_num2);
      found_gate=TRUE;
      return tmp;
    }
    else
    {
      if(tmp->previous_gate1!=NULL)
       tmp=search_gate(tmp->previous_gate1,search);
       
      if(found_gate) return tmp;
      
      if(tmp->previous_gate2!=NULL && tmp->previous_gate2 !=NUP)
       tmp=search_gate(tmp->previous_gate2,search);
       
      if(!tmp->previous_gate1 &&
         (!tmp->previous_gate2 || tmp->previous_gate2==NUP)
        )
      return tmp;
    }
  }
  else return tmp;
}

Kod dziala, jednak zwiesza sie jesli sie wpisze wiecej bramke z bramkami NOT (NUP to neuzywany wskazk w bramce NOT po ktorym sie nie sprawdza). Co jest zle?? Bardzo prosze o pomoc! POZDRAWIAM!