Solution


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



Leo Liberti 2008-01-12