Return to Snippet

Revision: 68435
at January 18, 2015 07:49 by hcosic2


Initial Code
#include <iostream>
using namespace std;

struct element
{
       int label;
       element *lijevi, *desni;
       };

element *Tbin = new element;

element *Root (element *Tbin)
{
        return Tbin;
        }

element *pretrazivanje (element *el, int x) {
     if (el -> label == x)
        return el;
     if (el -> lijevi != NULL)
        if (pretrazivanje (el -> lijevi, x) != NULL)
           return pretrazivanje (el -> lijevi, x);
     if (el -> desni != NULL)
        if (pretrazivanje (el -> desni, x) != NULL)
           return pretrazivanje (el -> desni, x);
     return NULL;
}

int Label (element *el)
{
    return el -> label;
}

element *Parent (element *n, element *Tbin)
{
        element *child = NULL, *sibling = NULL;
        if (Tbin -> lijevi == n || Tbin -> desni == n)
           return Tbin;
        if (Tbin -> lijevi != NULL)
           child = Parent (n, Tbin -> lijevi);
        if (Tbin -> desni != NULL)
           sibling = Parent (n, Tbin -> desni);
        if (child != NULL)
           return child;
        if (sibling != NULL)
           return sibling;
        return NULL;
        }

element *LeftChild (element *el)
{
        return el -> lijevi;
        }

element *RightChild (element *el)
{
        return el -> desni;
        }

void ChangeLabel (int x, element *el)
{
     el -> label = x;
 }
 
int CreateRight (int x, element *el)
{
    if (RightChild (el) != NULL)
       return 0;
    element *novi = new element;
    el -> desni = novi;
    novi -> label = x;
    novi -> lijevi = NULL;
    novi -> desni = NULL;
    return 1;
}

int CreateLeft (int x, element *el)
{
    if (LeftChild (el) != NULL)
       return 0;
    element *novi = new element;
    el -> lijevi = novi;
    novi -> label = x;
    novi -> lijevi = NULL;
    novi -> desni = NULL;
    return 1;
}

void Delete (element *el, element *Tbin)
{
     if (el -> lijevi != NULL)
        Delete (el -> lijevi, Tbin);
     if (el -> desni != NULL)
        Delete (el -> desni, Tbin);
     if (el != Root (Tbin) && LeftChild (Parent (el, Tbin)) == el)
        Parent (el, Tbin) -> desni = NULL;
     else if (el != Root (Tbin))
          Parent (el, Tbin) -> desni = NULL;
     delete el;
 }
 
void Init (int x, element *Tbin)
{
          Tbin -> label = x;
          Tbin -> lijevi = NULL;
          Tbin -> desni = NULL;
 }

void PreOrder (element *n, element *Tbin)
{
     if (n == NULL)
        return;
     cout << n -> label << ", ";
     PreOrder (LeftChild (n), Tbin);
     PreOrder (RightChild (n), Tbin);
 }

void InOrder (element *n, element *Tbin)
{
     if (n == NULL)
        return;
     InOrder (LeftChild (n), Tbin);
     cout << n -> label << ", ";
     InOrder (RightChild (n), Tbin);
 }

void PostOrder (element *n, element *Tbin)
{
     if (n == NULL)
        return;
     PostOrder (LeftChild (n), Tbin);
     PostOrder (RightChild (n), Tbin);
     cout << n -> label << ", ";
 }

Initial URL


Initial Description
Implementacija binarnog stabla pomoću pokazivača

Initial Title
binstablo_pokazivac.h

Initial Tags


Initial Language
C++