C++模版树的建立

来源:互联网 发布:iphone软件灰色删不掉 编辑:程序博客网 时间:2024/06/14 06:59

头文件:

#ifndef TREE_H#define TREE_Hnamespace wyp{template<class T>class SearchTree;template<class T>class TreeNode{public:TreeNode() : data(NULL){}TreeNode(T data, TreeNode<T> *left, TreeNode<T> *right) : data(data), left(left), right(right){} friend class SearchTree<T>;private:T data;TreeNode<T> *left;TreeNode<T> *right;};template<class T>class SearchTree{public:SearchTree() : root(NULL){}virtual ~SearchTree();void insert(T item);bool inTree(T item) const;void inorderShow() const;private:void insert(T item, TreeNode<T> *& subTreeRoot);bool inTree(T item, TreeNode<T> *subTreeRoot) const;void deleteSubTree(TreeNode<T> *&subTreeRoot); void inorderShow(TreeNode<T> *subTreeRoot) const;TreeNode<T> *root;};}#endif

实现:

#include "tree.h"#include <iostream>using namespace std;namespace wyp{template<class T>void SearchTree<T>::insert(T item, TreeNode<T> *& subTreeRoot){if(subTreeRoot == NULL){subTreeRoot = new TreeNode<T>(item, NULL, NULL);}else if(item < subTreeRoot->data){insert(item, subTreeRoot->left);}else{insert(item, subTreeRoot->right);}}template<class T>void SearchTree<T>::insert(T item){insert(item, root);}template<class T>bool SearchTree<T>::inTree(T item, TreeNode<T> *subTreeRoot) const{if(subTreeRoot == NULL){return false;}else if(subTreeRoot->data == item){return true;}else if(subTreeRoot->data > item){inTree(item, subTreeRoot->right);}else{inTree(item, subTreeRoot->left);}}template<class T>bool SearchTree<T>::inTree(T item) const{inTree(item, root);}template<class T>void SearchTree<T>::deleteSubTree(TreeNode<T> *&subTreeRoot){if(subTreeRoot != NULL){deleteSubTree(subTreeRoot->left);deleteSubTree(subTreeRoot->right);delete subTreeRoot;subTreeRoot = NULL;}}template<class T>void SearchTree<T>::inorderShow(TreeNode<T> *subTreeRoot) const{if(subTreeRoot != NULL){inorderShow(subTreeRoot->left);cout << subTreeRoot->data << "\t";inorderShow(subTreeRoot->right);}}template<class T>void SearchTree<T>::inorderShow() const{inorderShow(root);}template<class T>SearchTree<T>::~SearchTree(){deleteSubTree(root);}}

利用:

#include <iostream>#include "tree.h"#include "tree.cpp"using namespace std;using wyp::SearchTree;int main(){SearchTree<int> t;cout << "Enter the number \n";int next;cin >> next;while(next >= 0){t.insert(next);cin >> next;}cout << "Show tree\n";t.inorderShow();cout << endl;return 0;}




原创粉丝点击