| #include <iostream> using namespace std; #include <stdlib.h> #include <time.h> #include "BSTree.h" #include "Timer.h" #define random(num) (rand() % (num)) #define randomize() srand((unsigned)time(NULL)) #define NODENUM 200000//node number int data[NODENUM]; void zero(int &t) { t = 0; } int main() { BSTree<int> a; Timer t; randomize(); int i; for (i = 0; i < NODENUM; i++) data[i] = i; for (i = 0; i < NODENUM; i++) swap(data[i], data[random(NODENUM)]);//random swap t.start(); for (i = 0; i < NODENUM; i++) a.insert(data[i]); cout << "Insert time: " << t.GetTime() << "\tNode number: " << NODENUM << endl; t.start(); for (a.first(); a.get() != NULL; a.next()) a.get()->data = 0; cout << "Non-Stack time: " << t.GetTime() << endl; t.start(); a.LevelOrder(zero); cout << "LevlOrder time: " << t.GetTime() << endl; t.start(); a.PreOrder(zero); cout << " PreOrder time: " << t.GetTime() << endl; t.start(); a.InOrder(zero); cout << " InOrder time: " << t.GetTime() << endl; t.start(); a.PostOrder(zero); cout << "PostOrder time: " << t.GetTime() << endl; return 0; } |
| #ifndef Timer_H #define Timer_H #include <windows.h> class Timer { public: Timer() { QueryPerformanceFrequency(&Frequency); } inline void start() { QueryPerformanceCounter(&timerB); } inline double GetTime() { QueryPerformanceCounter(&timerE); return (double)(timerE.QuadPart - timerB.QuadPart) / (double)Frequency.QuadPart * 1000.0; } private: LARGE_INTEGER timerB, timerE, Frequency; }; #endif |
| Insert time: 868.818 Node number: 200000 Non-Stack time: 130.811 LevlOrder time: 148.438 PreOrder time: 125.47 InOrder time: 129.125 PostOrder time: 130.914 |
| Insert time: 1355.69 Node number: 200000 Non-Stack time: 207.086 LevlOrder time: 766.023 PreOrder time: 183.287 InOrder time: 179.835 PostOrder time: 190.674 |