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++