C++二叉排序树输出查找时间与比较次数
时间: 2023-10-27 17:15:06 浏览: 147
在C++中实现二叉排序树,输出查找时间和比较次数的方法如下:
首先,在二叉排序树的查找过程中,每次比较都会涉及到节点的值大小比较,因此可以在比较时记录比较次数,最后输出即可。
其次,可以使用计时函数来记录查找所用的时间。比如在Windows平台下,可以使用`GetTickCount()`函数来获取当前系统运行时间(以毫秒为单位)。
示例代码如下:
```c++
#include<iostream>
#include<windows.h> //计时函数所需的头文件
using namespace std;
//定义二叉排序树节点结构体
struct BSTNode{
int data;
BSTNode *left;
BSTNode *right;
};
//定义二叉排序树类
class BST{
private:
BSTNode *root; //根节点指针
public:
BST(){
root = nullptr;
}
BSTNode* getRoot(){
return root;
}
//二叉排序树的插入操作
void insert(int val){
if(root == nullptr){
root = new BSTNode{val, nullptr, nullptr};
return;
}
BSTNode *cur = root;
while(cur != nullptr){
if(val < cur->data){
if(cur->left == nullptr){
cur->left = new BSTNode{val, nullptr, nullptr};
break;
}
else{
cur = cur->left;
}
}
else{
if(cur->right == nullptr){
cur->right = new BSTNode{val, nullptr, nullptr};
break;
}
else{
cur = cur->right;
}
}
}
}
//二叉排序树的查找操作
bool search(int val, int &cnt){ //cnt记录比较次数
BSTNode *cur = root;
while(cur != nullptr){
cnt++; //比较次数+1
if(val == cur->data){
return true;
}
else if(val < cur->data){
cur = cur->left;
}
else{
cur = cur->right;
}
}
return false;
}
};
int main(){
BST bst;
int n = 1000000;
for(int i=0; i<n; i++){
bst.insert(rand() % n); //生成n个[0, n-1]之间的随机数插入二叉排序树
}
int cnt = 0; //记录比较次数
int val = rand() % n; //随机生成一个[0, n-1]之间的数作为查找值
DWORD start = GetTickCount(); //记录起始时刻
bool found = bst.search(val, cnt); //查找操作
DWORD end = GetTickCount(); //记录结束时刻
DWORD time = end - start; //计算查找所用时间
cout << "查找值: " << val << endl;
if(found){
cout << "查找成功!" << endl;
}
else{
cout << "查找失败!" << endl;
}
cout << "比较次数: " << cnt << endl;
cout << "查找时间: " << time << "ms" << endl;
return 0;
}
```
以上代码演示了如何使用C++实现二叉排序树的插入和查找操作,并输出每次查找所用的比较次数和时间。注意,由于随机数生成的不确定性,每次运行结果可能会有所不同。
阅读全文