Binary Tree implementing main function help Header File Ple
Binary Tree implementing main function help :
Header File: Please do correct if something is wrong or needs to be excluded.
#ifndef BINARYTREE_H
 #define BINARYTREE_H
#include <list>
 #include <iostream>
 #include <cstdlib>
 #include <algorithm>
template <typename E>           // base element type
 class Node {             // a node of the tree
 public:
 Node() : elt(), par(NULL), left(NULL), right(NULL) { }  // constructor
private:
 E    elt;             // element value
 Node*   par;            // parent
 Node*   left;            // left child
 Node*   right;            // right child
template <class U> friend class BinaryTree;
 template <class U> friend class Position;
 };
 template <typename E>      // base element type
 class BinaryTree
 {
 public:                   // public types
//Defines a node position
 class Position
 {
 public:
   Position(Node <E>* _v = NULL) : v(_v) { }  // constructor
  //Returns the element at the position
   E& operator*()
   {
    return v->elt;
   }
  //Returns a Position object
   Position left() const    // get left child
   {
    return Position(v->left);
   }
  //Returns a Position object
   Position right() const    // get right child
   {
    return Position(v->right);
   }
  //Returns a Position object
   Position parent() const    // get parent
   {
    return Position(v->par);
   }
  //Returns true or false
   bool isRoot() const    // root of tree?
   {
    return v->par == NULL;
   }
  //Returns true or false
   bool isExternal() const    // an external node?
   {
    return v->left == NULL && v->right == NULL;
   }
  //Returns true or false
   bool isInternal() const    // an external node?
   {
    return !isExternal();
   }
private:
   Node<E>* v;
   template <class U> friend class BinaryTree;
 };//End Position class definition
 /* Position List type definition*/
typedef std::list<Position> PositionList;
 public: //Binary member functions
 BinaryTree() : _root(NULL), n(0) { }
 ~BinaryTree();   // The destructor need to properly deletes all nodes in the tree to prevent memory leaks.
 int size() const;  // Returns and integer tof the number of nodes.
 bool empty() const;  // Returns a true if the tree is empty else false.
 int height() const;  // Returns height of the tree
 int depth() const;  // Returns depth of the tree
 Position root() const; // Return the position of the root node.
 void addRoot();   // Creates and adds the initial root node to the tree this must be added first.
 void expandExternal(const Position& p);    //Expands each external node with a left and right child that are empty.
 PositionList positions() const;      // Returns a std:list of the nodes in the tree call preorder() function.
 void preorder(Node<E>* v, PositionList& pl) const; // Traversal algorithm for the tree to populate the PositionList
 Position removeAboveExternal(const Position& p); //remove p and parent
private:
 Node <E> * _root;         // pointer to the root
 int n;            // number of nodes
 };
template <typename E> int BinaryTree<E>::size() const { return n; }
 template <typename E> bool BinaryTree<E>::empty() const { return size() == 0; }
 template <typename E> typename BinaryTree<E>::Position BinaryTree<E>::root() const { return Position(_root); }
 template <typename E> int BinaryTree<E>::height() const { return height() == 0; }
 template <typename E> int BinaryTree<E>::depth() const { return depth() == 0; }
template <typename E>
 void BinaryTree<E>::expandExternal(const Position& p) {
 Node* v = p.v;
 v->left = new Node;
 v->left->par = v;
 v->right = new Node;
 v->right->par = v;
 n += 2;
 }
template <typename E>
 typename BinaryTree<E>::Position BinaryTree<E>::removeAboveExternal(const Position& p) {
 Node* w = p.v;
 Node* v = w->par;
 Node* sib = (w == v->left ? v->right : v->left);
 if (v == _root) {
   _root = sib;
   sib->par = NULL;
 }
 else {
   Node* gpar = v->par;
   if (v == gpar->left) gpar->left = sib;
   else gpar->right = sib;
   sib->par = gpar;
 }
 delete w; delete v;
 n -= 2;
 return Position(sib);
 }
template <typename E>
 typename BinaryTree<E>::PositionList BinaryTree<E>::positions() const {
 PositionList pl;
 preorder(_root, pl);
 return PositionList(pl);
 }
template <typename E>
 void BinaryTree<E>::preorder(Node<E>* v, PositionList& pl) const {
 pl.push_back(Position(v));
 if (v->left != NULL) preorder(v->left, pl);
 if (v->right != NULL) preorder(v->right, pl);
 }
#endif
Main.cpp :
#include <list>
 #include <cstdlib>
 #include <iostream>
 #include <algorithm>
 #include \"BinaryTree.h\"
 using namespace std;
template<typename E>
 int depth(const BinaryTree<int> & T, const BinaryTree<int>::Position& p)
 {
 BinaryTree<E> TreeDepth;
 if (!TreeDepth.empty())
 {
   if (TreeDepth.empty())
    return 0;
   if (v->left == NULL && v->right == NULL)
    return 1;
   if (!v->left)
    return depth(v->right) + 1;
   if (!v->right)
    return depth(v->left) + 1;
 }
 return ((max(depth(v->left), depth(v->right)) + 1));
 }
template<typename E>
 int height(const BinaryTree<int>& T)
 {
 BinaryTree<E> treeHeight;
 if (!treeHeight.empty())
   return 0;
 return (max(height(v->left), height(v->right)));
 }
int main(void)
 {
 BinaryTree<int> myTree;
 return EXIT_SUCCESS;
 }
I need to implement depth() and height() fucntion in the main function.
Is this right? If not, can canyone help to fix it? thank you
Solution
#include



