二叉树

来源:互联网 发布:linux奶瓶破解wifi 编辑:程序博客网 时间:2024/04/30 05:23
#include<stdexcept>#ifndef ToozyBinaryTreeHead#define ToozyBinaryTreeHeadtemplate <class T>class ToozyBinaryTree{public://typedef bool (*findFunc)(typename const ToozyBinaryTree<T>::ToozyBinaryTreeNode*,const T*);static const int LEFT = 1;static const int RIGHT = 2;struct ToozyBinaryTreeNode{ToozyBinaryTreeNode *left;ToozyBinaryTreeNode *right;ToozyBinaryTreeNode *nextNode;T value;ToozyBinaryTreeNode(const T *v){value = *v;left = nullptr;right = nullptr;nextNode = nullptr;}};//findFunc findFunction;ToozyBinaryTree(ToozyBinaryTreeNode *root);ToozyBinaryTree(T *v);~ToozyBinaryTree();const ToozyBinaryTreeNode *find(const T *value) const;const ToozyBinaryTreeNode *add(const ToozyBinaryTreeNode *parent,const T *value,int type);//const ToozyBinaryTreeNode *left(const ToozyBinaryTreeNode *parent);//const ToozyBinaryTreeNode *right(const ToozyBinaryTreeNode *parent);//int depth();//深度const ToozyBinaryTreeNode *getRoot();//void del(ToozyBinaryTreeNode *node);//int nodeNum();//int leafNum();protected:ToozyBinaryTreeNode* _root;ToozyBinaryTreeNode* _lastNode;};template<class T>ToozyBinaryTree<T>::ToozyBinaryTree(typename ToozyBinaryTree<T>::ToozyBinaryTreeNode *root){_root = root;if (_root) {_lastNode = _root;}};template<class T>ToozyBinaryTree<T>::ToozyBinaryTree(T *v){_root = new ToozyBinaryTree<T>::ToozyBinaryTreeNode(v);if (_root) {_lastNode = _root;}};template<class T>ToozyBinaryTree<T>::~ToozyBinaryTree(){ToozyBinaryTree<T>::ToozyBinaryTreeNode *node,*nextNode;node = _root;while (nextNode = node->nextNode) {delete node;node = nextNode;}};template<class T>const typename ToozyBinaryTree<T>::ToozyBinaryTreeNode *ToozyBinaryTree<T>::find(const T *value) const{ToozyBinaryTree<T>::ToozyBinaryTreeNode *node,*nextNode;node = _root;while (nextNode = node->nextNode) {if (node->value == *value) {return node;}node = nextNode;}return nullptr;};template<class T>const typename ToozyBinaryTree<T>::ToozyBinaryTreeNode *ToozyBinaryTree<T>::add(const typename ToozyBinaryTree<T>::ToozyBinaryTreeNode *parent,const T *value,int type){if (!parent) {throw new std::runtime_error("parent node can not empty");}ToozyBinaryTree<T>::ToozyBinaryTreeNode *node = new ToozyBinaryTree<T>::ToozyBinaryTreeNode(value);ToozyBinaryTree<T>::ToozyBinaryTreeNode *parentNode = const_cast<ToozyBinaryTree<T>::ToozyBinaryTreeNode *>(parent);switch (type) {case ToozyBinaryTree<T>::LEFT:if (parentNode->left) {throw std::runtime_error("left node already exists");}parentNode->left = node;break;case ToozyBinaryTree<T>::RIGHT:if (parentNode->right) {throw std::runtime_error("right node already exists");}parentNode->right = node;break;default:throw std::runtime_error("unknow node type");}_lastNode->nextNode = node;_lastNode = node;return node;};template<class T>const typename ToozyBinaryTree<T>::ToozyBinaryTreeNode *ToozyBinaryTree<T>::getRoot(){return _root;};#endif


原创粉丝点击