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

 

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

            DGEBHIFCA   

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

 

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

void quick_sort(int a[],int low,int high){
    int l = low;
    int r = high;
    int key = a[l];
    //处理一侧已经没有其他数据的情况
    if(low>=high){
        return;
    }
    while(l<r){
        //要有l<r的判断因为在循环中改变了值,必须有=的判断否则key=a[r]将造成死循环
        while(l<r && a[r]>=key) r--;
        a[l]=a[r];
        while(l<r && a[l]<=key) l++;
        a[r] = a[l];

    }
    a[l]=key;
    quick_sort(a,low,l-1);
    quick_sort(a,l+1,high);
}


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

 

int is_large(int a[],int n){
    if(!a){
        return 0;
    }
    if(n==1){
        return 1;
    }
    return is_large(a,n-1) && (a[n-2]<a[n-1]);
}


 

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

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

 

 

本篇博客出自  阿修罗道,转载请注明出处:http://blog.csdn.net/fansongy/article/details/6870120

 

 

 

 

阅读更多
版权声明:本文为 松阳 (blog.csdn.net/fansongy) 原创文章,转载必须注明出处: https://blog.csdn.net/fansongy/article/details/6870120
文章标签: 面试 算法 c
个人分类: 面试
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭