二叉查找树的基类实现(终)

下面举一个具体使用这个数据结构的例子,由于前面的缺点,这里

显得比较麻烦,也比较耗资源,但确实使用到了多态的好处

main.cpp 文件

#include <iostream>
#include "BSTree.h"
#include "IntClass.h"
#include "StringClass.h"
using namespace std;
int main()
{
BSTree bstree;
BSTree bstreeStr;

bstree.insert(new IntClass(10),new StringClass("Tao",3));
bstree.insert(new IntClass(5),new StringClass("Tao",3));
bstree.insert(new IntClass(15),new StringClass("Lily",4));
bstree.insert(new IntClass(3),new StringClass("Tom",3));
bstree.insert(new IntClass(7),new StringClass("John",4));
bstree.insert(new IntClass(13),new StringClass("Peter",5));
bstree.insert(new IntClass(17),new StringClass("Joson",5));
bstree.insert(new IntClass(2),new StringClass("Tao",3));
bstree.insert(new IntClass(4),new StringClass("Tao",3));
bstree.insert(new IntClass(6),new StringClass("Tao",3));
bstree.insert(new IntClass(8),new StringClass("Lucy",4));
bstree.insert(new IntClass(11),new StringClass("Jim",3));
bstree.insert(new IntClass(14),new StringClass("Brown",5));
bstree.insert(new IntClass(16),new StringClass("Tao",3));
bstree.insert(new IntClass(18),new StringClass("Tao",3));
bstree.insert(new IntClass(1),new StringClass("Tao",3));
bstree.insert(new IntClass(9),new StringClass("Tao",3));
bstree.insert(new IntClass(12),new StringClass("Tao",3));

cout<<"-------------------------------------------------"<<endl;
cout<<"The total tree is like this:"<<endl;
bstree.outPut();
cout<<"-------------------------------------------------"<<endl;
cout<<"The sub-tree is like this:"<<endl;
bstree.ascend(bstree.get(new IntClass(15)));
cout<<"-------------------------------------------------"<<endl;

bstreeStr.insert(new StringClass("Jim",3),new StringClass("Hello, I'm a student",20));
bstreeStr.insert(new StringClass("Lucy",4),new StringClass("Hello, I'm a teacher",20));
bstreeStr.insert(new StringClass("Brown",5),new StringClass("Hello, I'm a doctor",19));
bstreeStr.insert(new StringClass("Lily",4),new StringClass("Hello, I'm a actor",18));
bstreeStr.insert(new StringClass("Tao",3),new StringClass("Hello, I'm a student",20));
bstreeStr.insert(new StringClass("Peter",5),new StringClass("Hello, I'm a teacher",20));
bstreeStr.insert(new StringClass("John",4),new StringClass("Hello, I'm a doctor",19));
bstreeStr.insert(new StringClass("Tony",4),new StringClass("Hello, I'm a actor",18));
bstreeStr.insert(new StringClass("Linda",5),new StringClass("Hello, I'm a student",20));
bstreeStr.insert(new StringClass("Jurcy",5),new StringClass("Hello, I'm a teacher",20));
bstreeStr.insert(new StringClass("Chern",5),new StringClass("Hello, I'm a doctor",19));
bstreeStr.insert(new StringClass("Rone",4),new StringClass("Hello, I'm a actor",18));
bstreeStr.outPut();
cout<<"-------------------------------------------------"<<endl;
}
输出结果如下:

输出结果

附:前面要使用一个队列来进行树的层次遍历,这里将它给出,这是一个模板类

#ifndef QUEUE_H
#define QUEUE_H
#define MAXLEN 20
#include <assert.h>
template<class T>
class Queue
{
private:
	T data[MAXLEN];
	int head,end;
public:
	Queue();
	bool EnQueue(T next);
	T DeQueue();
	bool isFull();
	bool isEmpty();
};
#endif
template<class T>
Queue<T>::Queue()
{
	head = 0;
	end = 0;
}
template<class T>
bool Queue<T>::EnQueue(T next)
{
	if(isFull())return false;
	data[end] = next;
	end=end+1;
	if(end >= MAXLEN)end = 0;
	return true;
}
template<class T>
T Queue<T>::DeQueue()
{
	assert(!isEmpty());
	int temp=head;
	head=head+1;
	if(head>=MAXLEN)
		head=0;
	return data[temp];
}
template<class T>
bool Queue<T>::isFull()
{
	if(end+1==head || (head==0 && end == MAXLEN-1)) 
		return true;
	return false;
}
template<class T>
bool Queue<T>::isEmpty()
{
	if(head == end)return true;
	return false;
}
posted @ 2011-10-01 17:48  哈哈开心  阅读(286)  评论(0编辑  收藏  举报