/* Name: inttree.cxx
Author: Leo Liberti
*/
#include <iostream>
#include "inttree.h"
IntTree::IntTree() : value(0), parent(NULL) { }
IntTree::~IntTree() {
int ss = subTree.size();
if (ss > 0) {
for(int i = 0; i < ss; i++) {
if (subTree[i]) {
delete subTree[i];
}
}
}
}
void IntTree::addSubNode(int n) {
IntTree* newNode = new IntTree;
newNode->setValue(n);
newNode->setParent(this);
subTree.push_back(newNode);
}
int IntTree::getNumberOfSubTrees(void) {
return subTree.size();
}
IntTree* IntTree::getSubTree(int i) {
if (i < 0 || i >= subTree.size()) {
return NULL;
} else {
return subTree[i];
}
}
IntTree* IntTree::removeSubTree(int i) {
IntTree* ret = NULL;
if (i >= 0 && i < subTree.size()) {
ret = subTree[i];
ret->setParent(NULL);
stit = subTree.begin();
for(int j = 0; j < i; j++) {
stit++;
}
subTree.erase(stit);
}
return ret;
}
void IntTree::addSubTree(IntTree* t) {
t->setParent(this);
subTree.push_back(t);
}
IntTree* IntTree::getParent(void) {
return parent;
}
void IntTree::setParent(IntTree* p) {
parent = p;
}
int IntTree::getValue(void) {
return value;
}
void IntTree::setValue(int n) {
value = n;
}
void IntTree::findValue(int n, IntTree* &found) {
if (!found) {
if (value == n) {
found = this;
} else {
int ss = subTree.size();
for(int i = 0; i < ss; i++) {
IntTree* t = NULL;
subTree[i]->findValue(n, t);
if (t) {
found = t;
}
}
}
}
}
void IntTree::print(void) {
using namespace std;
cout << value;
int ss = subTree.size();
if (ss > 0) {
cout << " ( ";
for(int i = 0; i < ss; i++) {
subTree[i]->print();
}
cout << ")";
}
cout << " ";
}