Revision: 68564
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 20, 2015 04:24 by mjug
Initial Code
#include <iostream> using namespace std; #define MAX_elem 100000 typedef int labeltype; struct elem { labeltype label; int firstchild, nextsibling; }; struct tr { elem eleme[MAX_elem]; int first; }; void IniT (int x, tr *s) { for (int i = 0; i < MAX_elem; i++) { s->eleme[i].firstchild = -1; s->eleme[i].nextsibling = -1; s->eleme[i].label = -1; } s->first = x; cout << "Upisite oznaku korijena: " << endl; cin >> s->eleme[x].label; } int RootT (tr *s) { return s->first; } void CreateT (int x, int n, tr *s) { // x dijete cvora n //Provjerava da li cvor uopce i postoji if (s->eleme[n].label == -1) { cout << "Cvor ne postoji!" << endl; } // Ako evor nema dijece dodaj mu djete else if (s->eleme[n].firstchild == -1) { s->eleme[n].firstchild = x; cout << "Oznaka: "; cin >> s->eleme[x].label; } //ako evor ima dijete else { int brat; bool provjera = true; brat = s->eleme[n].firstchild; do { if (s->eleme[brat].nextsibling == -1) { provjera = false; } else { brat = s->eleme[brat].nextsibling; } } while (provjera); s->eleme[brat].nextsibling = x; cout << "Oznaka: "; cin >> s->eleme[x].label; } } int FirstChildT (int x, tr *s) { return s->eleme[x].firstchild; } int NextSiblingT (int n, tr *s) { return s->eleme[n].nextsibling; } int ParentT (int n, tr *s) { for (int i = 0; i < MAX_elem; i++) { if (s->eleme[i].firstchild == n) { return i; } else if (s->eleme[i].nextsibling == n) { return ParentT (i, s); } } return -1; } int LabelT (int n, tr *s) { if (s->eleme[n].label == -1) { return -1; } else { return s->eleme[n].label; } } void ChangeLabelT (int x, int n, tr *s) { if (s->eleme[n].label == -1) { cout << "Cvor ne postoji!" << endl; return; } s->eleme[n].label = x; } void Delete (int n, tr *s) { if (s->eleme[n].nextsibling == -1 && s->eleme[ParentT (n, s)].firstchild == n) { s->eleme[ParentT (n, s)].firstchild = -1; s->eleme[ParentT (n, s)].label = -1; s->eleme[n].label = -1; } else if (s->eleme[n].nextsibling != -1 && s->eleme[ParentT (n, s)].firstchild == n) { s->eleme[ParentT (n, s)].firstchild = s->eleme[n].nextsibling; } else { int brat = s->eleme[ParentT (n, s)].firstchild; while (s->eleme[brat].nextsibling != n) { brat = s->eleme[brat].nextsibling; } s->eleme[brat].nextsibling = s->eleme[n].firstchild; } } void DeleteT (int n, tr *s) { if (s->eleme[n].label == -1) { cout << "Cvor ne postoji!" << endl; } else if (s->eleme[n].firstchild != -1) { while (s->eleme[n].firstchild != -1) { Delete (s->eleme[n].firstchild, s); } Delete (n, s); } else { Delete (n, s); } }
Initial URL
Initial Description
opcenito stablo
Initial Title
opcenito stablo.h
Initial Tags
Initial Language
C++