c++实现二叉搜索树

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万数据那就不是几时秒的事情的了,有可能是几小时

遍历的时候用先序遍历就得到一个有序的从小到大序列,先序遍历在我其他文章里写了这里就不再写了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值