c++实现二叉搜索树
#include<iostream>
#include<queue>
using namespace std;
struct node
{
int data;
node* leftchild = NULL;
node* rightchild = NULL;
};
class tree
{
node* root;
void CreatTree(node* &rt, int n);
void DeleteTree(node* rt);
public:
void LevelOrder();
tree();
~tree();
};
tree::tree()
{
root = NULL;
char c;
int n;
while ((c = cin.get()) != '\n')
{
cin.putback(c);
cin >> n;
CreatTree(root, n);
}
}
void tree::CreatTree(node* &rt, int n)
{
if (rt != NULL)
{
if (rt->data > n)
{
CreatTree(rt->leftchild, n);
}
if (rt->data < n)
{
CreatTree(rt->rightchild, n);
}
else
{
return;
}
}
else
{
rt = new node;
rt->data = n;
}
}
void tree::LevelOrder()
{
queue<node*> aQueue;
node* poinret = root;
aQueue.push(poinret);
while (!aQueue.empty())
{
poinret = aQueue.front();
aQueue.pop();
cout << poinret->data << " ";
if (poinret->leftchild != NULL)
{
aQueue.push(poinret->leftchild);
}
if (poinret->rightchild != NULL)
{
aQueue.push(poinret->rightchild);
}
}
}
void tree::DeleteTree(node* rt)
{
if (rt != NULL)
{
DeleteTree(rt->leftchild);
DeleteTree(rt->rightchild);
delete rt;
}
}
tree::~tree()
{
DeleteTree(root);
}
int main()
{
tree a;
a.LevelOrder();
}
二叉搜索树在数据算法有着重要的应用,比如对大量数据进行排序可以用二叉搜索树,效率远远高于“冒泡排序”,“选择排序”,我测试过对10000个整数排序,这3三种排序所需时间如下:
二叉搜索树排序法:160ms
冒泡排序法:20029ms
选择排序法:1445ms
总结:
对于一万个整数排序二叉搜索树排序比冒泡快100多倍,比选择排序快10倍,如果数据量更大会快的更多比如10万数据或者100万数据那就不是几时秒的事情的了,有可能是几小时
遍历的时候用先序遍历就得到一个有序的从小到大序列,先序遍历在我其他文章里写了这里就不再写了