Return to Snippet

Revision: 65683
at January 11, 2014 03:55 by HeatPwnz


Initial Code
#include<iostream>
using namespace std;

struct elem {
    char oznaka;
    int firstchild,nextsibling;
};
struct tr {
    elem element[1000];
    int root;
};
typedef struct tr tree;
typedef int node;

int RootT(tree *T){
    return T->root;
    }   

int FirstChildT (int n, tree *T){
     return T->element[n].firstchild;     
}
int NextSiblingT (int n, tree *T) {
    return T->element[n].nextsibling;
}

int ParentT(int n, tree *T){
    if(n == T->root || T->element[n].oznaka == ' ' )
        return -1;
    for (int i=0; i<1000; i++) {
        if (FirstChildT(i, T)==n) return i;
        if (NextSiblingT(i, T)==n) return ParentT(i, T);
        }
    return -1;
}
char LabelT (int n, tree *T) {
    return T->element[n].oznaka;
}
int CreateT(char oznaka, int n, tree *T) {
     int i=0;
     while (LabelT(i, T)!=' ') i++;
     T->element[i].oznaka=oznaka;
     T->element[i].firstchild=-1;
     T->element[i].nextsibling=-1;
     if (T->element[n].firstchild!=-1) {
        n=FirstChildT(n, T);
        while (NextSiblingT(n, T)!=-1) n=NextSiblingT(n, T);
        T->element[n].nextsibling=i;
        }
     else T->element[n].firstchild=i;
     return i;
}
void ChangeLabelT(char oznaka, int n, tree *T) {
     T->element[n].oznaka=oznaka;
}

bool DeleteT (int n, tree *T) {
     int roditelj, brat;
     roditelj = ParentT(n,T);
     brat = T->element[roditelj].firstchild;
     
     if(T->element[n].oznaka == ' ') return false;
     
     while(T->element[n].firstchild != -1){
          int dijete = T->element[n].firstchild;
          DeleteT(dijete,T);
          }
     if(brat == n)
          T->element[ParentT(n,T)].firstchild = T->element[n].nextsibling;
     else if(T->element[n].nextsibling != -1){
          T->element[brat].nextsibling = T->element[n].nextsibling;
          }

     T->element[n].oznaka = ' ';
     return true;
}

tree *InitT(char oznaka, tree *T) {
     T=new tree;
     T->root=0;
     T->element[0].oznaka=oznaka;
     T->element[0].firstchild=-1;
     T->element[0].nextsibling=-1;
     for (int i=1; i<1000; i++) {
         T->element[i].oznaka=' ';
         T->element[i].firstchild=-1;
         T->element[i].nextsibling=-1;
         }
     return T;
}

Initial URL


Initial Description
header koristen za realizaciju opcenitog stabla

Initial Title
opcenito_stablo.h

Initial Tags


Initial Language
C++