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

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

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

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;

}

你可能感兴趣的:(二叉查找树)