/* 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 << " "; }