C++模版树的建立

原创 2012年03月24日 11:01:22

头文件:

#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;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

创建二叉查找树的完整C代码

基本概念 二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二查搜索书。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树...
  • u014488381
  • u014488381
  • 2014年12月02日 20:30
  • 3247

数据结构和算法——kd树

一、K-近邻算法K-近邻算法是一种典型的无参监督学习算法,对于一个监督学习任务来说,其mm个训练样本为:{(X(1),y(1)),(X(2),y(2)),⋯,(X(m),y(m))}\left \{ ...
  • google19890102
  • google19890102
  • 2017年02月02日 11:31
  • 3452

【c++】构建一棵简单的二叉树

本文主要讲了如何使用c++来构建一个二叉树类,以及一些功能算法的实现。文中大部分函数的思想都是递归,其中赋值运算符重载有传统写法和现代写法两个版本,层序遍历是非递归,前、中、后序遍历有递归和非递归两个...
  • LLZK_
  • LLZK_
  • 2016年10月16日 15:58
  • 6835

二叉树的非递归前序、中序以及后序遍历C++模版类实现

#include using namespace std; //////////////////////////////////////////////////////////////////...
  • w397090770
  • w397090770
  • 2012年05月07日 20:27
  • 4692

二叉树的非递归前序、中序以及后序遍历C++模版类实现

#include using namespace std; //////////////////////////////////////////////////////////////////...
  • orzlzro
  • orzlzro
  • 2012年06月11日 09:28
  • 670

二叉树、线索二叉树类模版(C++)

  • 2013年11月21日 17:33
  • 304KB
  • 下载

C++ 类模板二(类模版与友元函数)

http://www.cnblogs.com/zhanggaofeng/p/5661829.html //类模版与友元函数 #include using namespace std; templa...
  • sinat_35297665
  • sinat_35297665
  • 2018年01月03日 11:21
  • 9

c++链表实现队列,深搜加宽搜,加模版类实现迷宫问题;

数据结构作业二,用链表实现队列,用深搜宽搜解决迷宫问题,另是模版类的用法; 模版类用法举例: 栗子一:template class Node{ public: bbb data; ...
  • qq_34548401
  • qq_34548401
  • 2016年11月18日 13:37
  • 462

初探C++类模版学习笔记

类模板
  • wxwd1
  • wxwd1
  • 2014年07月09日 12:13
  • 837

C++容器学习笔记1——模版、迭代器

模版 看书上说,所有的容器都是模版,于是我想先了解下模版是什么。
  • Ri8ren
  • Ri8ren
  • 2017年03月21日 16:08
  • 130
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++模版树的建立
举报原因:
原因补充:

(最多只允许输入30个字)