C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增

本文转自http://blog.csdn.net/fansongy/article/details/6870120


1、一棵二叉树前序序列为A B D E G C F H I 对称序列为DBGEACHFI则其后序列为?

            DGEBHIFCA   

    前序排序是先根节点,再左右节点;对称序列是先左节点,然后根节点,再右节点;后续序列是先左节点,然后右节点,再根节点。

    从前序序列来看,根节点是A,在对称序列中可以发现,A的左子树是DBGE,右子树是CHFI,然后再看前序序列,DBGE中,的根节点是B,在对称序列中发现B的左子树是D,右子树就是GE,同样地,CHFI也用相同的方法去判断,就可以得到结果了。

 

2、快速排序的递归实现:

  1. void quick_sort(int a[],int low,int high){  
  2.     int l = low;  
  3.     int r = high;  
  4.     int key = a[l];  
  5.     //处理一侧已经没有其他数据的情况  
  6.     if(low>=high){  
  7.         return;  
  8.     }  
  9.     while(l<r){  
  10.         //要有l<r的判断因为在循环中改变了值,必须有=的判断否则key=a[r]将造成死循环  
  11.         while(l<r && a[r]>=key) r--;  
  12.         a[l]=a[r];  
  13.         while(l<r && a[l]<=key) l++;  
  14.         a[r] = a[l];  
  15.   
  16.     }  
  17.     a[l]=key;  
  18.     quick_sort(a,low,l-1);  
  19.     quick_sort(a,l+1,high);  
  20. }  


 3、用递归算法判断数组a[N]是否为一个递增数组

 

  1. int is_large(int a[],int n){  
  2.     if(!a){  
  3.         return 0;  
  4.     }  
  5.     if(n==1){  
  6.         return 1;  
  7.     }  
  8.     return is_large(a,n-1) && (a[n-2]<a[n-1]);  
  9. }  


 

      因为传入的是数组中元素的个数,最大的元素为n-1。

      第一次调用传入的是最大的值,就想到倒着比,即判断每一个值和它的前一个值的大小,直到剩一个为止。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值