第2次实验——算法基本功 与 综合思考

本文介绍如何通过广度优先遍历来从顶部开始逐层打印二叉树结点数据,突出广度优先遍历在二叉树遍历中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. #include <iostream>  
  2. #include <fstream>  
  3. #include <time.h>  
  4. using namespace std;  
  5.   
  6. #define TXT_NUM_COUNT 1000001  
  7.   
  8. int ImportToArray(const char *filename,int *array)  //将filename内的纯数字文本导入数组array;  
  9. {  
  10.     int count=0;  
  11.     ifstream fin;  
  12.     fin.open(filename);  
  13.     if( fin.fail() )  
  14.     {  
  15.         cout<<"file read fail!"<<endl;  
  16.         return -1;  
  17.     }  
  18.     while( fin.eof() ==false )  
  19.         fin>>array[count++];  
  20.     fin.close();  
  21.     return count;  
  22. }  
  23.   
  24. int ExportWithArray(const char *filename,int *array,int count)  
  25. {  
  26.     ofstream fout;  
  27.     fout.open(filename);  
  28.     if(fout.fail())  
  29.     {  
  30.         cout<<"file wirte fail"<<endl;  
  31.         return -1;  
  32.     }  
  33.     for(int i=0;i<count;i++)  
  34.         fout<<array[i]<<endl;  
  35.     fout.close();  
  36. }  
  37.   
  38. void QuickSort(int *array,int size)  
  39. {  
  40.     if(size>1)  
  41.     {  
  42.         int i=0;  
  43.         int j=size;  
  44.         int p=array[i];  
  45.         do  
  46.         {  
  47.             do i++;   
  48.             while(array[i]<p);  
  49.             do j--;  
  50.             while(array[j]>p);  
  51.             if(i<j)  swap(array[i],array[j]);  
  52.         }while(i<j);  
  53.         swap(array[0],array[j]);  
  54.   
  55.         QuickSort(array,j);  
  56.         QuickSort(array+j+1,size-j-1);  
  57.     }  
  58. }  
  59.   
  60. void swap(int &a,int &b)  
  61. {  
  62.     int t=a;  
  63.     a=b;  
  64.     b=t;  
  65. }  
  66.   
  67. void main()  
  68. {  
  69.   
  70.     time_t t_start,t_end;  
  71.     int *array=new int[TXT_NUM_COUNT]; //已经测得有1000001个数据,其中多测一个为空行  
  72.     int count=ImportToArray("largeW.txt",array);  
  73.   
  74.     //printf("%d %d",count,array[count-1]);  
  75.     cout<<count<<" "<<array[count-1]<<endl;  
  76.   
  77.     t_start=time(NULL);  
  78. //  bubbleSort(array,count-1);  
  79. //  mergeSort(array,count-1);  
  80.     QuickSort(array,count-1);  
  81.     t_end=time(NULL);  
  82.       
  83. //  cout<<"冒泡用时(S):"<<difftime(t_end,t_start)<<endl;  
  84.   
  85. //  cout<<"归并用时(S):"<<difftime(t_end,t_start)<<endl;  
  86.   
  87.     cout<<"快速用时(S):"<<difftime(t_end,t_start)<<endl;  
  88.    
  89. //  ExportWithArray("largeW_bubble.txt",array,count-1);  
  90.   
  91. //  ExportWithArray("largeW_merge.txt",array,count-1);  
  92.     ExportWithArray("largeW_quick.txt",array,count-1);  
  93.   
  94.     delete [] array;  
  95.   
  96.     ////测试用  
  97.     //int a[]={8,2,1,4,6,8,9,0,1,1};  
  98.     ////bubbleSort(a,10);  
  99.     //QuickSort(a,10);  
  100.     //for(int i=0;i<10;i++)  
  101.     //  cout<<a[i]<<" ";  
  102. }  

(2)经典算法面试题(至少选择其中1道题并作答,有自己的思考与理解)

怎样从顶部开始逐层打印二叉树结点数据?请编程。

答:当做一个图来使用广度优先遍历即可.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值