[ create a new paste ] login | about

Link: http://codepad.org/vdfaqh4e    [ raw code | fork ]

C++, pasted on Dec 27:
#include <iostream>
#include <new>
#include <fstream>
#include <sstream>

template <class T>
class Node {
public:
  T value;
  Node *left;
  Node *right;
  Node(T value);
  static bool add(Node *&root, T value);
  static void release(Node *&root);
  static void dump(Node *&root);
};

template <class T> Node<T>::Node(T value) {this->value = value; left = right = 0; }

template <class T> bool Node<T>::add(Node<T> *&root, T value) {
  if (!root) {
    Node *s;
    if ((s = new(std::nothrow)Node(value)) == 0)
      return false;
    root = s;
    return true;
  }
  if (value < root->value)
    return Node::add(root->left, value);
  else
    return Node::add(root->right, value);
}

template <class T> void Node<T>::dump(Node<T> *&root) {
  if (!root)
    return;
  dump(root->left);
  std::cout << root->value << std::endl;
  dump(root->right);
  delete root;
  root = 0;
}

template <class T> void Node<T>::release(Node<T> *&root) {
  if (!root)
    return;
  release(root->left);
  release(root->right);
  delete root;
  root = 0;
}

/*--------------------------------------------------------------------------*/
typedef int DataType;

class Tree {
  Node<DataType> *root;
public:
  Tree();
  ~Tree();
  bool add(DataType value);
  void load(std::istream &fin);
  void dump();
};

Tree::Tree() { root = 0; }
Tree::~Tree() { Node<DataType>::release(root); }
bool Tree::add(DataType value) { return Node<DataType>::add(this->root, value); }
void Tree::dump() { Node<DataType>::dump(root); }

void Tree::load(std::istream &fin) {
  bool flag_ok = true;
  std::string buff;
  while (getline(fin, buff, '\n')) {
    std::stringstream ss(buff);
    DataType value;
    ss >> value;
    if(!this->add(value)) { flag_ok = false; break; }
  }
  if (!flag_ok)
    std::cerr << "memory full, vomited." << std::endl;
}

/*--------------------------------------------------------------------------*/
int main() {
  Tree *tree = new Tree();
  ifstream fin("test.txt");
  if (fin)
    tree->load(fin);
  fin.close();
  tree->dump();
  delete tree;
  return 0;
}
/* end */


Output:
No errors or program output.


Create a new paste based on this one


Comments: