C++模版树的建立

头文件:

#ifndef TREE_H
#define TREE_H
namespace 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;
}




  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值